使用片段动态更改抽屉的内容



我需要动态更改抽屉内容。我打算用碎片来做。意味着启动新的片段来改变抽屉的视图。事实上,我的抽屉本身就是一块碎片。我在第一个片段中给出了这样的代码:

@Override
public void onActivityCreated (Bundle savedInstanceState) 
{ 
    super.onActivityCreated(savedInstanceState);
    LinearLayout helpLL = (LinearLayout) getView().findViewById(R.id.helpLL);
    helpLL.setOnClickListener(new OnClickListener()
    {           
        @Override
        public void onClick(View v)
        {
                Fragment detail = new DetailFragment();
                FragmentManager fragmentManager = getFragmentManager();
                fragmentManager.beginTransaction().replace(R.id.left_drawer, detail).commit();                                 
        }
    });
}

我需要用这种布局更改整个抽屉视图。left_drawer是main.xml中我的第一个片段所在的视图。但当我点击时,什么都没有发生。

请告诉我这个代码出了什么问题。

谢谢Jomia

我终于找到了解决方案。我在代码中犯了一个错误。实际上,我用xml硬编码了第一个抽屉的片段。用XML硬编码的片段无法替换。这就是为什么没有创建第二个片段。

所以我动态地添加了第一个片段。现在运行良好。。

在main.xml 中

    <LinearLayout android:layout_width="240dp"
        android:layout_height="match_parent" 
        android:id="@+id/left_drawer"   
        android:layout_weight="1"
        android:layout_gravity="right"
        android:orientation="vertical">
   </LinearLayout>

活动中

        FragmentManager fragmentManager = getFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        settingsFragment = new SettingsFragment();
        fragmentTransaction.add(R.id.left_drawer, settingsFragment, "settingsFragment");
        fragmentTransaction.commit();

在SettingsFragment.java 中

    @Override
    public void onActivityCreated (Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        LinearLayout helpLL = (LinearLayout) getView().findViewById(R.id.helpLL);
        helpLL.setOnClickListener(new OnClickListener()
        {           
            @Override
            public void onClick(View v)
            {           
                Fragment detail = new DetailFragment();
                FragmentManager fragmentManager = getFragmentManager();            
                fragmentManager.beginTransaction().replace(R.id.left_drawer, detail,"Details").commit();
            }
        });
    }

仅此而已。。。

最新更新