使用默认的Android Studio导航抽屉切换片段

3

我在Android Studio中的导航抽屉实现上有些困惑。onCreate方法调用了PlaceholderFragment类,但我并不明白它是干什么的。

无论如何,我应该在哪里实现我的onItemClickListener以根据导航抽屉中所选项显示不同的碎片(fragment)?

这是我当前的PlaceholderFragment:

public static class PlaceholderFragment extends Fragment {

    private ListView listView;
    private CustomAdapter expenseAdapter;

    public PlaceholderFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);

        expenseAdapter = new CustomAdapter(getActivity());

        listView = (ListView) rootView.findViewById(R.id.lvExpense);
        listView.setAdapter(expenseAdapter);
        expenseAdapter.loadObjects();
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                String expense = expenseAdapter.getItem(position).get("title").toString();
                Toast.makeText(getActivity(), expense, Toast.LENGTH_SHORT).show();
            }
        });

        return rootView;
    }
}

PS: 该类中的onItemClickListener是用于导航抽屉中不是列表视图的另一个ListView。基本上我正在使用parse.com并从数据库中填充ListView中的项目。

谢谢。

编辑: 我最终在onNavigationDrawerItemSelected中使用此代码:

Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new SearchFragment();
            break;
        default:
            break;
    }

    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, fragment).commit();

    }

fragment = new HomeFragment(); 中,Android Studio 提示需要 android.support.v4.app.fragment。为什么会这样呢?
2个回答

7
(如果你还没有这样做):在Android Studio中,最好生成带有导航抽屉的示例Activity(Alt+Insert->Activity->Navigation Drawer Activity(在Android Studio 0.8.+上))。您将获得一个托管NavigationDrawerFragment和一些可绘制项的活动。
在NavigationDrawerFragment的onCreateView中,您可以填充要在抽屉中显示的列表项,并且Activity将自动实现接口NavigationDrawerFragment.NavigationDrawerCallbacks,其中包含方法onNavigationDrawerItemSelected(int position)。当您单击导航抽屉中某个位置的项目时,将调用此方法,在该方法中,您将使用所需的片段替换R.id.container。
您不必使用PlaceholderFragment,它是首次显示之前要显示的模拟内容。请随意删除它并创建任何您想要的片段。
而OnItemClickListener已在NavigationDrawerFragment的onCreateView方法中实现。

创建我的 Fragment 时,考虑到我正在使用 Android Studio 的抽屉(Drawer),我应该使用 android.app.Fragment 还是 android.support.v4.app.Fragment? - ArnaudToutain
最好使用android.app.Fragment,虽然另一种变体也是可能的(需要进行一些更改)。 - Andrii Bas
我有一些问题,没有使用support.v4。请参见我的问题中的编辑。 - ArnaudToutain
请使用getFragmentManager()代替getSupportFragmentManager()。 - Andrii Bas
最后一个问题:如果我想要显示默认的DrawerItem,由于我无法访问savedInstanceState,我应该如何做?非常感谢您的一切。 - ArnaudToutain
显示剩余3条评论

1
占位符片段就是这样一个东西。它是一个空的片段,用于自动生成的代码中向你展示如何使用导航抽屉。你可以使用任何片段与导航抽屉一起使用。
当在实现NavigationDrawerFragment的活动中选择一个项时,可以在onNavigationDrawerItemSeleced(int position)中显示一个片段。您可以使用FragmentManager将旧片段替换为新片段。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接