嗨,我是Android开发的新手,我正在努力使用片段 .
在我的fragmentPageAdapter中我有4个案例:
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
switch (arg0) {
case 0:
return new friFragment();
case 1:
return new freeFragment();
case 2:
return new mixedFragment();
case 3:
return new recFragment();
default:
break;
}
return null;
}
只要片段不包含任何代码,我就可以轻松地从一个片段滑动到另一个片段 . 但是,我想在其中一个片段中实现GridView(recFragment case 3) . 我的第一次尝试是在onCreateView中初始化适配器
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getActivity().setContentView(R.layout.activity_rec);
myGrid = (GridView) getActivity().findViewById(R.id.recGrid);
myGrid.setAdapter(new recAdapter(getActivity().getApplicationContext(), items));
myGrid.setOnItemClickListener(this);
return inflater.inflate(R.layout.activity_rec,container,false);
这可以延伸到我没有收到任何错误但是案例2只显示了半秒钟,然后跳转到案例3,此时不可能在片段之间滑动 .
使用onAttach:
public void onAttach(Context context) {
super.onAttach(context);
this.context = context;
myGrid = (GridView) getActivity().findViewById(R.id.recGrid);
myGrid.setAdapter(new recAdapter(getActivity().getApplicationContext(), items));
myGrid.setOnItemClickListener(this);
}
产生这个致命异常:
java.lang.NullPointerException:尝试在tryouts.demoapplication.recFragment.onAttach(recipesFragment.java:42)上的空对象引用上调用虚拟方法'void android.widget.GridView.setAdapter(android.widget.ListAdapter)'在android.support.v4.Ad.BackStack.beginTransition的android.support.v4.app.BackStackRecord.ensureFragmentsAreInitialized(BackStackRecord.java:1077)的android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019) BackStackRecord.java:1032)在Android.support.v4上的android.support.v4.app.BackStackRecord.run(BackStackRecord.java:658)android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) Android.support.v4.view.ViewPager.populate上的.s.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570)位于android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) . (ViewPager.java:1177 )在android.support.v4.view.ViewPager.populate(ViewPager.java:1025)at和位于android.view.Choreographer $ 3.run(ViewPager.java:254)的android.view.Choreographer $ CallbackRecord.run(Choreographer.java:858),位于android.view.Choreographer.doCallbacks(Choreographer.java:670) )在android.view.Choreographer $ FrameDisplayEventReceiver.run(Choreographer.java:844)的android.view.Handler.handleCallback(Handler.java:739)android.view.Choreographer.doFrame(Choreographer.java:603) .os.Handler.dispatchMessage(Handler.java:95)位于android.app.Looper.loop(Looper.java:148),位于java.lang.reflect的android.app.ActivityThread.main(ActivityThread.java:5417) . 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)的com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:726)中的Method.invoke(Native Method)
经过几个小时的google和stackoverflow搜索,我发现问题出在上下文中 . 我认为解决方案将是onAttach,但正如你所看到的那样对我没有帮助 . 除非我当然误解了如何使用onAttach功能,这很可能就是这种情况 .
所以,如果我对上下文的问题是正确的,我该如何获得正确的上下文?
或许我实现gridview的方法是错误的?如果是这样,您对如何在片段中创建gridview的正确实现有任何建议吗?
1 回答
也许这可以帮到你