3

FragmentでgridViewのsetOnItemClickListenerが取得できません。何が問題になる可能性がありますか?

これが私のコードです::

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

2 に答える 2

9

ButtonView で次の設定が必要になる場合があります。android:focusable="false" android:focusableInTouchMode="false"

リスト行に CheckBox を追加すると onItemClick イベントが失われるのを参照してください。

于 2012-04-25T03:30:55.910 に答える
3

Fragments を使用する場合、ビューの初期化は 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();
        }*/
    }});
}
}
于 2012-04-12T09:49:30.637 に答える