在片段中使用导航抽屉和工具栏
我正在开发一个android应用程序,我想在片段内使用工具栏和导航抽屉。我创建了一个名为的内部类,支持类,然后使用方法setUptoolbar在onCreateView方法但我得到了一个异常错误。 你认为我应该怎么做?预先感谢您,并为我英文破碎而感到遗憾。 :)在片段中使用导航抽屉和工具栏
片段代码:
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( )'空对象引用
您正在使用错误的层次结构。正确的方法是:
Activity -> contains your toolbar, drawer and fragment holder (e.g. frame layout or viewpager)
现在,如果你想从片段中一些行动,你必须在将活动实施片段添加抽象事件侦听器打开抽屉。
看到更多的在github这个快速链接:http://guides.codepath.com/android/fragment-navigation-drawer
我以直接的方式回答了这个问题。 –
您是一路错了你的方法。你可以做到这一点,而不需要定义一个扩展活动的新类。您始终通过getActivity()
参考相关活动。即使您想保留参考,只需使用MainActivity a = (MainActivity) getActivity()
即可将您的片段附加到MainActivity
。然后在a
上运行。您正在使用此错误,因为您正在使用
SupportClass supportClass = new SupportClass();
活动使用Context.startActivity(Intent intent)
开始。看起来你并不打算开始新的活动。你只是想改变基础活动的属性。所以正如我上面所说的,使用 MainActivity a = (MainActivity) getActivity()
并与a
一起玩a.setSupportActionBar()
。
片段内的活动! OMG –
@BirendraSingh你是什么意思?它不是一个Activity,它只是一个类,它只是为了使用setSupportActionBar方法而扩展AppCompatAcivity。 –