我尝试了以下代码:
Intent in= new Intent(Activity1.this,Fragment.class);
startactivity(in);
这不是碎片的工作方式,碎片必须附加到Activity
。要获得所需的效果,您必须启动一个包含要显示的片段的新Activity
,或者在当前Activity
中显示新片段。
为了决定采用哪种方法,我会考虑您希望Fragment
如何影响界面的导航。如果您希望用户能够使用back按钮返回到上一个视图,则应该启动一个新的Activity
。否则,应将当前Activity
中的视图替换为新的Fragment
。
尽管可以将Fragment
添加到后堆栈,但只有当您对用户界面的结构有信心时,我才会尝试这样做。
要在当前Activity
中显示新片段,可以使用FragmentTransaction
:
Fragment fragment = CustomFragment.newInstance();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.container_layout, fragment).commit();
在onCreate或您的意图中编写此代码:
FragmentManager fm = getSupportFragmentManager();
YourFragment fragment = new YourFragment();
fm.beginTransaction().add(R.id.main_contenier,fragment).commit();
未通过Intent打开碎片。
您应该使用片段管理器。
Fragment fragment= new YourFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, fragment); // fragment container id in first parameter is the container(Main layout id) of Activity
transaction.addToBackStack(null); // this will manage backstack
transaction.commit();
片段的示例
public class MyFragment extends Fragment implements View.OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.fragment_my, container, false);
Button button1= (Button) view.findViewById(R.id.button1_Id);
Button button2= (Button) view.findViewById(R.id.button2_Id);
return view;
}
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment= new YourFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragment_container, fragment); // fragmen container id in first parameter is the container(Main layout id) of Activity
transaction.addToBackStack(null); // this will manage backstack
transaction.commit();
}
});
}