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

时间:2014-11-05 09:30:30

标签: android fragment drawerlayout

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

@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

1 个答案:

答案 0 :(得分:2)

我终于找到了解决方案。我在我的代码中犯了一个错误。实际上我在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();
            }
        });
    }

多数人......