【问题标题】:Using navigation drawer and toolbar in fragment在片段中使用导航抽屉和工具栏
【发布时间】:2017-08-25 17:18:59
【问题描述】:

我正在开发一个 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);
    }

}

}

这是错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'android.view.Window$Callback android.view.Window.getCallback()'

【问题讨论】:

  • 片段内的活动!天哪
  • @BirendraSingh 你是什么意思?它不是一个 Activity,它只是一个类,它扩展了 AppCompatAcivity 只是为了使用 setSupportActionBar 方法。

标签: android android-fragments material-design


【解决方案1】:

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

SupportClass supportClass = new SupportClass();

使用Context.startActivity(Intent intent) 开始活动。您似乎不打算开始新的活动。您只想更改基础活动的属性。所以正如我上面所说的使用 MainActivity a = (MainActivity) getActivity ()a 一起玩,比如a.setSupportActionBar ()

【讨论】:

    【解决方案2】:

    您使用了错误的层次结构。正确的做法是:

    Activity -> 包含您的工具栏、抽屉和片段持有者(例如 框架布局或viewpager)

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

    请参阅 github 上的此快速链接了解更多信息:http://guides.codepath.com/android/fragment-navigation-drawer

    【讨论】:

    • 这和我直接回答的一样。
    猜你喜欢
    • 2016-05-03
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    相关资源
    最近更新 更多