我在第一个google页面上尝试了关于android片段的每个教程,但我无法正常工作。
所以我有一个导航栏活动MainActivity
。
现在我想在抽屉里点击一下来改变片段。
在我的content_main
(MainActivity
活动中的默认片段)中,我有一个framelayout,我希望将片段放入。我有以下片段:fragment_main
,{{ 1}}和fragment_one
。我希望在点击导航抽屉中的按钮时显示这些内容。
我想使用片段的原因是导航抽屉将保持在最顶层。
提前致谢!
编辑:这是我用来改变片段的功能:
它只是为了测试,而不是完成。
fragment_two
答案 0 :(得分:6)
我解决了!
显然,我必须使用android.support.v4.app.Fragment;
而不是android.app.Fragment;
。
这是我使用它的代码:
protected void setFragment(Fragment fragment) {
android.support.v4.app.FragmentTransaction t = getSupportFragmentManager().beginTransaction();
t.replace(R.id.fragment_container, fragment);
t.commit();
}
要设置它(从导航栏onNavigationItemSelected()
,您可以执行此操作:
setFragment(new RoosterFragment());
我希望这可以帮助其他人解决同样令人沮丧的问题。
答案 1 :(得分:1)
此链接可以帮助您创建fragment
。
这就是你想要的导航抽屉 Click here
答案 2 :(得分:1)
这是 FrameLayout
<FrameLayout
android:id="@+id/main_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/view"
android:layout_marginTop="@dimen/medium_margin"></FrameLayout>
现在,调用活动的displayview方法onCreate(),
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//rest of your code here
displayView(0); // fragment at 0 position
}
displayView方法,有三个方法
public void displayView(int position) {
switch (position) {
case 0:
tvTitle.setText(getResources().getString(R.string.signin_tile));
showFragment(new LoginFragment(), position);
break;
case 1:
tvTitle.setText(getResources().getString(R.string.forgot_password_tile));
showFragment(new ForgotPasswordFragment(), position);
break;
case 2:
tvTitle.setText(getResources().getString(R.string.change_password_tile));
showFragment(new ChangePasswordFragment(), position);
break;
}
}
从displayView方法调用showFragment方法,
public void showFragment(Fragment fragment, int position) {
FragmentTransaction mTransactiont = getSupportFragmentManager().beginTransaction();
mTransactiont.replace(R.id.main_container, fragment, fragment.getClass().getName());
mTransactiont.commit();
}
答案 3 :(得分:0)
试试这个。这是我的新手代码更容易理解:)
FragmentTransaction transaction;
switch (id){
case R.id.button_fragment_one:
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, new FragmentOne());
transaction.addToBackStack(null);
transaction.commit();
break;
case R.id.button_fragment_two:
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.frame_layout, new FragmentTwo());
transaction.commit();
break;
default:
break;
}