【问题标题】:Switch Fragment with default Android Studio navigation drawer使用默认的 Android Studio 导航抽屉切换 Fragment
【发布时间】:2014-07-22 23:54:50
【问题描述】:

我对 Android Studio 中导航抽屉的实现有点迷茫。 onCreate 方法调用 PlaceholderFragment 类,我不太明白它的用途。

但无论如何,我应该在哪里实现我的onItemClickListener 以根据导航抽屉中选择的项目显示不同的fragments

这是我当前的 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。这是为什么呢?

【问题讨论】:

    标签: android android-fragments android-studio navigation-drawer


    【解决方案1】:

    (如果您没有这样做):在 AndroidStudio 中,最好使用 Navigation Drawer 生成示例 Activity(Alt+Insert -> Activity -> Navigation Drawer Activity(在 Android Studio 0.8.+ 上)) 您将获得承载 NavigationDrawerFragment 和一些可绘制对象的活动。

    在 NavigationDrawerFragment onCreateView 中填充您希望在抽屉中显示的列表项,活动将自动实现接口 NavigationDrawerFragment.NavigationDrawerCallbacks 和方法 onNavigationDrawerItemSelected(int position)。当您单击导航抽屉中某个位置的项目时会调用此方法,并在此方法中将R.id.container 替换为该位置所需的片段。

    您不必使用PlaceholderFragment,它是第一次显示的模拟,然后再实现自己的。随意删除它并创建您想要的任何片段。

    并且 OnItemClickListener 已经在 NavigationDrawerFragment 的方法 onCreateView 中实现。

    【讨论】:

    • 感谢您的回答!所以在 onNavigationDrawerItemSelected 方法中,我应该只使用 switch case 吗?并替换: fragmentManager.beginTransaction() .replace(R.id.container, PlaceholderFragment.newInstance(position + 1)) .commit(); PlaceholderFragment 有我想要的任何东西?
    • 创建我的 Fragment 时,考虑到我使用的是 Android Studio 的抽屉,我应该使用什么? android.app.Fragment 还是 android.support.v4.app.Fragment ?
    • 最好使用 android.app.Fragment,但也可以使用其他变体(有一些变化)
    • 我在不使用 de support.v4 时遇到了一些问题。请参阅我的问题中的编辑。
    • 使用 getFragmentManager() 代替 getSupportFragmentManager()
    【解决方案2】:

    占位符片段就是这样。它是一个空白片段,用于自动生成的代码中,向您展示如何使用导航抽屉。您可以将任何片段与导航抽屉一起使用。

    您可以在实现 NavigationDrawerFragment 的活动中的 onNavigationDrawerItemSeleced(int position) 中选择项目时显示片段。您可以使用 FragmentManager 将旧片段换成新片段。

    【讨论】:

      猜你喜欢
      • 2016-11-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      • 2018-03-06
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多