Android 在片段中使用导航抽屉和工具栏

Android 在片段中使用导航抽屉和工具栏,android,android-fragments,material-design,Android,Android Fragments,Material Design,我正在开发一个android应用程序,我想在一个片段中使用一个工具栏和一个导航抽屉。我创建了一个名为Supportclass的内部类,然后在onCreateView方法中使用了名为setUptoolbar的方法,但出现了一个异常错误。 你觉得我该怎么办?提前谢谢你,我的英语不好,很抱歉。:) 片段代码: public class FragmentVRList extends Fragment { @Override public View onCreateView(LayoutInflater

我正在开发一个android应用程序,我想在一个片段中使用一个工具栏和一个导航抽屉。我创建了一个名为Supportclass的内部类,然后在onCreateView方法中使用了名为setUptoolbar的方法,但出现了一个异常错误。 你觉得我该怎么办?提前谢谢你,我的英语不好,很抱歉。:)

片段代码:

public class FragmentVRList extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.activity_main,container,false);
    View cardView = inflater.inflate(R.layout.card_vr,container,false);
    Generator generator = new Generator();

    RecyclerView recyclerView = (RecyclerView)rootView.findViewById(R.id.recycle);
    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
    AdapterVRList adapter = new AdapterVRList(getActivity(), Generator.getData());
    recyclerView.setAdapter(adapter);
    recyclerView.setNestedScrollingEnabled(false);

    SupportClass supportClass = new SupportClass();
    supportClass.setUptoolbar(getActivity(),rootView);

    final TeacherNet teacher = new TeacherNet(getActivity());
    int Length = Generator.getData().size();

    final JSONObject object = new JSONObject();
    for (int position = 1;position<Length;position++){
        switch (position){
            case 1:
                cardView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {

                        try {
                            object.put("vrcode","1");
                            teacher.SelectContent(object);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    }
                });
            case 2:
                cardView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        try {
                            object.put("vrcode","2");
                            teacher.SelectContent(object);
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
            case 3:
                cardView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        try {
                            object.put("vrcode","3");
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
        }
    }

    return rootView;
}

private class SupportClass extends AppCompatActivity{
    public void setUptoolbar(Activity activity, View view){
        Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        DrawerLayout drawerLayout = (DrawerLayout) view.findViewById(R.id.drawer);
        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(activity,drawerLayout,toolbar,0,0);
        toggle.syncState();
        drawerLayout.addDrawerListener(toggle);
    }

}

}
public类FragmentVRList扩展了Fragment{
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图根视图=充气机。充气(右布局。活动主容器,假);
视图卡片视图=充气机。充气(右布局。卡片\u vr,容器,假);
发电机=新发电机();
RecycleView RecycleView=(RecycleView)rootView.findViewById(R.id.recycle);
setLayoutManager(新的LinearLayoutManager(getActivity());
adaptervrlistadapter=新的AdapterVRList(getActivity(),Generator.getData());
recyclerView.setAdapter(适配器);
recyclerView.setNestedScrollingEnabled(false);
SupportClass SupportClass=新的SupportClass();
setUptoolbar(getActivity(),rootView);
最终教师网教师=新教师网(getActivity());
int Length=Generator.getData().size();
最终的JSONObject对象=新的JSONObject();

对于(int position=1;position您使用了错误的层次结构。正确的方法是:

活动->包含工具栏、抽屉和碎片夹(例如。 框架布局(或viewpager)

现在,如果您想从片段中的某个操作打开抽屉,您必须在片段中添加抽象事件侦听器,该侦听器将由活动实现


查看github上的此快速链接了解更多信息:

您的方法完全错误。您可以在不定义扩展活动的新类的情况下执行此操作。您始终可以通过
getActivity()
引用基础活动。即使您想保留引用,也只需使用
MainActivity a=(MainActivity)getActivity()
假设您的片段已附加到
MainActivity
。然后对
a
进行操作。由于您正在使用

SupportClass supportClass = new SupportClass();
活动是使用
Context.startActivity(Intent-Intent)
启动的。似乎您不打算启动新的活动。您只想更改基础活动的属性。因此,正如我上面所说,使用
MainActivity a=(MainActivity)getActivity()
并像
a.setSupportActionBar()一样玩
a

片段内的活动!OMG@BirendraSingh你的意思是什么?它不是一个活动,它只是一个类,它扩展了AppCompativity,只是为了使用setSupportActionBar方法。这和我直接回答的一样。