我正在尝试做的是仅将一个Activity用作许多片段的主机,例如该活动一次只能容纳一个片段,并且片段应按一定顺序附加到该活动。
我的片段代码:
public class FirstFragment extends Fragment{
//some code here to instantiate FirstFragment here.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main, container, false);
Button button = (Button) view.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
((MainActivity) getActivity()).onFirstFragmentFinished(position);
}
});
return view;
}
// Container Activity must implement this interface
public interface FirstFragmentListener {
public void onFirstFragmentFinished(int position);
}
}
简而言之,在每个片段中我都有一个按钮,当按下它时,它将获得主机活动并调用
FirstFragmentListener
接口的已实现方法。public class MainActivity extends AppCompatActivity implements FirstFragmentListener {
@Override
public void onCreateView(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTra = fragmentManager.beginTransaction();
fragmentTra .replace(R.id.main_layout, new FirstFragment());
fragmentTra.commit();
}
@Override
public void onFirstFragmentFinished(int position)
{
if(position == 1)
{
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTra = fragmentManager.beginTransaction();
fragmentTra .replace(R.id.main_layout, new SecondFragment());
fragmentTra.commit();
}
}
}
创建活动后,请始终用FirstFragment布局替换该活动中的所有内容。
当FirstFragment完成工作并按下该片段上的按钮时,它将在此活动中调用FirstFragment接口的已实现方法,然后检查该位置的某个值,如果条件正确,则将FirstFragment替换为SecondFragment实例。
调用
commit()
方法时,应用程序崩溃。 最佳答案
使用onFirstFragmentFinished是错误的。查看官方文档:
android-comunication-activity-ffragment
最好是重写onAttach()方法。