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

问题描述:

我正在开发一个android应用程序,我想在片段内使用工具栏和导航抽屉。我创建了一个名为的内部类,支持类,然后使用方法setUptoolbaronCreateView方法但我得到了一个异常错误。 你认为我应该怎么做?预先感谢您,并为我英文破碎而感到遗憾。 :)在片段中使用导航抽屉和工具栏

片段代码:

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 $回调android.view.Window.getCallback( )'空对象引用

+0

片段内的活动! OMG –

+0

@BirendraSingh你是什么意思?它不是一个Activity,它只是一个类,它只是为了使用setSupportActionBar方法而扩展AppCompatAcivity。 –

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

Activity -> contains your toolbar, drawer and fragment holder (e.g. frame layout or viewpager)

现在,如果你想从片段中一些行动,你必须在将活动实施片段添加抽象事件侦听器打开抽屉。

看到更多的在github这个快速链接:http://guides.codepath.com/android/fragment-navigation-drawer

+0

我以直接的方式回答了这个问题。 –

您是一路错了你的方法。你可以做到这一点,而不需要定义一个扩展活动的新类。您始终通过getActivity()参考相关活动。即使您想保留参考,只需使用MainActivity a = (MainActivity) getActivity()即可将您的片段附加到MainActivity。然后在a上运行。您正在使用此错误,因为您正在使用

SupportClass supportClass = new SupportClass(); 

活动使用Context.startActivity(Intent intent)开始。看起来你并不打算开始新的活动。你只是想改变基础活动的属性。所以正如我上面所说的,使用 MainActivity a = (MainActivity) getActivity()并与a一起玩a.setSupportActionBar()