2016-10-13 8 views
0

こんにちは、私はAndroid開発にかなり新しいです、そして、私は断片の使用に苦労しています。私は4例持っている私のfragmentPageAdapterでAndroidViewのGridViewの実装

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; 
} 

を私はeasliy限りフラグメントは任意のコードが含まれていないとして、他の1つの断片にスライドすることができます。しかし、フラグメントの1つに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をケースにジャンプされた後、0.5秒間表示され、この時点で断片間をスライドすることは不可能です。

ONATTACH使用:

のjava.lang.NullPointerException:「無効android.widget.GridView.setAdapter(android.widgetを仮想メソッドを呼び出そうと

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); 
} 

は、この致命的な例外を生成します。 ListAdapter) 'をヌルオブジェクト参照 でtryouts.demoapplication.recFragment.onAttach(recipesFragment.java:42) android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1019)android.support.v4.app.BackStackRecord.beginTransitionでandroid.support.v4.app.BackStackRecord.ensureFragmentsAreInitialized(BackStackRecord.java:1077) (BackStackRecord.java:1032)android.support.v4.appで で。 BackStackRecord.run(BackStackRecord.java:658) (android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1617) android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:570) android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) android.support.v4.view.ViewPager.populate(ViewPager.java:1177) android.support.v4.view.ViewPager.populate(ViewPager.java:1025) android.support.v4.view.ViewPager $ 3.run(ViewPager.java:254) android.view.Choreographer $ CallbackRecord。 android.view.Choreographer.doCallbacks(Choreographer.java:858) (android.view.Choreographer.java:670) (android.view.Choreographer.java:603) (android.view.Choreographer $ FrameDisplayEventReceiver)で実行します。 android.os.Looper.loopでandroid.os.Handler.dispatchMessage(Handler.java:95) でandroid.os.Handler.handleCallback(Handler.java:739) で実行(Choreographer.java:844) ( Looper.java:148) android.app.ActivityThread.main(ActivityThread.java:5417) (java.lang.reflect.Method.invoke)(ネイティブメソッド) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java :726) at com.android.internal.os.ZygoteInit.main(ZygoteInit。java:616)

Google &の検索の時間を経て、私はこの問題が文脈にあることを知りました。私は解決策がonAttachであると思ったが、あなたが見ることができるように、それは私を助けなかった。もちろん、私はonAttach関数の使い方を誤解しています。これは非常にうまくいく可能性があります。

コンテキストが問題であることが正しいとすれば、どのように正しいコンテキストを取得できますか?

または、おそらく私のアプローチは、gridviewを実装するには間違っていますか?もしそうであれば、断片化したグリッドビューの適切な実装をどのように作成することができるか、提案はありますか?

答えて

2

多分これはあなたの返信用

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

View rootView = inflater.inflate(R.layout.activity_rec,container,false); 
// dont forget to initialise the items list 

myGrid = (GridView)rootView.findViewById(R.id.recGrid); 
myGrid.setAdapter(new recAdapter(rootView.getActivity,items)); 
myGrid.setOnItemClickListener(this); 

return rootView; 
+0

こんにちは感謝を助けることができます。しかし、これは基本的には私の最初の試みでした:)それは意図したとおりに動作しません。 –

+0

あなたのアクティビティがnullです。アクティビティがあるフラグメントのonActivityCreated関数をチェックしてください。ただし、より良い方法はAliによって提案されたものです。 public void onAttach(コンテキストコンテキスト){ super.onAttach(context); this.context = context; ビューrootView = inflater.inflate(R.layout.activity_rec、container、false); myGrid =(GridView)rootView.findViewById(R.id.recGrid); myGrid.setAdapter(新しいrecAdapter(context、items)); myGrid.setOnItemClickListener(this); } – surya

+0

私はすでに試したことをしようとしているようです。しかし、たぶんあなたが意味することを理解していない私だけです。 –

関連する問題