【问题标题】:how to call fragment from Navigation drawer?如何从导航抽屉中调用片段?
【发布时间】:2015-03-24 08:08:07
【问题描述】:

请帮助我,我是 android 新手。 我可以通过单击导航抽屉中的项目来显示 toast,但是如何从导航抽屉中打开新片段。

我在 NavigationDrawerFragment 中的代码是

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View layout = inflater.inflate(R.layout.fragment_navigation_drawer, container, false);
        recyclerView = (RecyclerView) layout.findViewById(R.id.drawerList);
        adapter = new EduAdapter(getActivity(), getData());
        recyclerView.setAdapter(adapter);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity(), recyclerView, new ClickListener() {
            @Override
            public void onClick(View view, int position) {
                Toast.makeText(getActivity(), "On click  " + position, Toast.LENGTH_LONG).show();

            mDrawerLayout.closeDrawer(GravityCompat.START);
                Toast.makeText(getActivity(), "On Long click  " + position, Toast.LENGTH_LONG).show();

            }

            @Override
            public void onLongClick(View view, int position) {
                Toast.makeText(getActivity(), "On long click  " + position, Toast.LENGTH_LONG).show();
            }
        }));
        return layout;
    }

主要活动是:

public class MainActivity extends ActionBarActivity {


    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_appbar);

        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar);

        getSupportActionBar().setDisplayShowHomeEnabled(true);
        NavigationDrawerFragment drawerFragment =
                (NavigationDrawerFragment) getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer);
        drawerFragment.setUp(R.id.fragment_navigation_drawer, (DrawerLayout) findViewById(R.id.drawer_layout), toolbar);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

请帮助我从抽屉中打开新片段,因为我只能显示 toast。 我在关注 Slidenerd 材料设计视频。

【问题讨论】:

    标签: android fragment navigation-drawer android-recyclerview


    【解决方案1】:

    创建一个扩展 Fragment Activity 的类,然后您可以从新类中打开新的 Fragment,如下所示:

        DetailViewFragment f1 = new DetailViewFragment(); 
       getSupportFragmentManager().beginTransaction().add(R.id.fragment_layout, f1).commit();
    

    在你的 onItemClicked 方法中导航到创建的类。

    希望对你有所帮助。

    【讨论】:

    • 我应该在哪里创建主要活动的类?那么我可以使用switch case吗?
    • 没有创建一个新的活动并扩展片段活动,然后为 setContentView () 设置片段的布局并使用它,如我所示。在您的导航抽屉片段 onItemClicked() 方法中,您应该使用 switch。
    【解决方案2】:

    在您的 RecyclerView 的项目上单击您只需以这种方式添加相应的片段。

     getSupportFragmentManager()
                        .beginTransaction()
                        .replace(your_container_id,
                                new YourFragment(), YOUR_FRAGMENT_STRING_TAG)
                        .commit();
    

    请记住,对于 recyclerview 的每次位置点击,您都将以上述方式添加片段。您可能可以在 recyclerView 的 onItemClick 中使用 switch case。 看看有没有帮助!!!如果您需要任何其他帮助,请告诉我!

    【讨论】:

    • 我必须在主要活动中创建新类然后使用 switch case 吗??
    • 不,你需要在你的 onItemClick 方法中实现这个
    【解决方案3】:

    创建一个方法并在Recylerview的onitemclicklistener中传递item位置

    public void changeFragment(int position) {
     switch (position) {
       case 0:{                getSupportFragmentManager().beginTransaction().replace(R.id.container, calenderFragment).setTransition                (FragmentTransaction.TRANSIT_FRAGMENT_OPEN).addToBackStack(null).commit();
                    break;
                }
                case 1:{                            getSupportFragmentManager().beginTransaction().replace(R.id.container, new PatientProfileFragment()).setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN).addToBackStack(null).commit();
                    break;
                }     
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-10-22
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      • 2016-01-03
      相关资源
      最近更新 更多