2012-04-12 4 views
3

FragmentでgridViewのsetOnItemClickListenerを取得できません。何が問題なの?

アイテムのクリックリスナーでgridViewを取得できません

はここに私のコードです::

public class MainMenuFragment extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 

     View view = inflater.inflate(R.layout.main_menu_fragment, container, false); 

     itemsGridViewObj = (GridView) view.findViewById(R.id.itemsGridView); 



     itemsGridViewObj.setOnItemClickListener(new OnItemClickListener() { 

      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
        long arg3) { 

       Log.d(TAG, "--> onItemClick listener...");  // Can not getting this method. 
       /*if(position == 1) { 
        FruitMenuFragment fruitMenuFragment = new FruitMenuFragment(); 
        fragmentTransaction.replace(android.R.id.content, fruitMenuFragment); 
        fragmentTransaction.commit(); 
       }*/ 
      } 
     }); 

     return view; 
    } 
}` 
+0

を参照してください。私はそれがonItemClickListenerを取得する問題を引き起こしていると思う! – MobiDev

+0

GridViewの各項目にボタンがあることを意味しますか?私。レイアウトでは、LisAdapterが使用します。 –

+0

はい。この場合、私はonItemClickListenerを取得していません! – MobiDev

答えて

9

あなたはあなたのButtonViewに次のように設定する必要があるかもしれません。 アンドロイド:フォーカス可能= "false" を アンドロイド:focusableInTouchMode = "false" を

は、それが実際にのみButtonViewを含むカスタムGridViewのあるadding CheckBox to list row loses my onItemClick events?

+1

私の問題も解決しました。私はClickableのチェックを外しましたが、Focusableはチェックしませんでした。 –

3

ビューの初期化は、2つのステージ上で発生したフラグメントを使用しました。

ビューは、onCreateViewメソッドの後に膨らまされ(したがって、アクセス可能になる)。このメソッドは、ビューを膨張させてそれをFragmentに返すためのものです。

したがって、ビューを検索してonClickListenersを設定するためのロジックは、最初にonActivityCreated()関数で実行する必要があります。これは、最初に膨張したビューにアクセスできるためです。

http://developer.android.com/reference/android/app/Fragment.html#Lifecycle以下

でGoogleドキュメントを見てくださいすることは、あなたのコードは、私が上記したものに準拠するように調整されています

public class MainMenuFragment extends Fragment { 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
// Inflate the layout for this fragment 

    return inflater.inflate(R.layout.main_menu_fragment, container, false);  
} 

@Override 
public void onActivityCreated(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    GridView itemsGridViewObj = (GridView) findViewById(R.id.itemsGridView); 

    itemsGridViewObj.setOnItemClickListener(new OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
      long arg3) { 

     Log.d(TAG, "--> onItemClick listener..."); // You should see this now 
     /*if(position == 1) { 
      FruitMenuFragment fruitMenuFragment = new FruitMenuFragment(); 
      fragmentTransaction.replace(android.R.id.content, fruitMenuFragment); 
      fragmentTransaction.commit(); 
     }*/ 
    }}); 
} 
} 
+0

上記の私のコメントを見てください... – MobiDev

+0

私のために働いていません。まず、 'Fragment'に' findViewById'メソッドがなく、 'getView()。findViewById'が動作しません。私はこの答えがどのように3つの票を得たか分かりません。 – vedant1811

関連する問題