14

編集:解決しました。アイテムの XML にフォーカス可能なものがある場合、リストのタッチが壊れます。つまり、すべてのチェックボックス、スイッチ、またはリストのようなものに対して android:focusable=false になります。そして完了=)

わかりました、ここに私の問題があります。

tabs と fragmentを使用するアプリを作成しましたが、 listViewで onItemClick をキャプチャしようとすると、行がタッチ/プレス/選択としてマークされないことを除いて、すべて思いどおりに進みます。

私は少し読んでいて、多くの人が同じ問題を抱えていますが、私を助ける回答はまったく見つかりませんでした.

私は ListFragment を実装したくありません。実際、どのように/なぜすべきかさえわかりません。また、すべてのコードが既に機能しているため、実装することでさらに多くの作業が必要になるかどうかもわかりません。だから、ここにあります:

フラグメント内で listView をクリックするためのリスナーを実装することは可能ですか? もしそうなら、どのように?

PD: minSDK=14、tatgetSDK=15

4

7 に答える 7

9

置くだけ

android:focusable="false"
android:clickable="false"

レイアウトで。すべてのテキストビュー、ボタンなど

于 2013-12-09T06:11:01.533 に答える
5

これは、あなたが望むことをするコードスニペットです。

ListView lv;

//code to get the listView instance using findViewByID etc

lv.setOnItemClickListener(new OnItemClickListener()
{
    @Override public void onItemClick(AdapterView<?> arg0, View arg1,int position, long arg3)
    { 
        Toast.makeText(EnclosingActivity.this, "Stop Clicking me", Toast.LENGTH_SHORT).show();
    }
});

人々は通常これにつまずきます。これがカバーされているかどうかを確認してください。

すべてのクリックとコールバック (例: メニュー/アクションバーのコールバック) は、フラグメントがバインドされているアクティビティに送信されるため、フラグメント クラスではなくアクティビティ クラスにある必要があります。

于 2013-02-15T18:15:53.103 に答える
5

これは役立つかもしれません

listview OnItemClick リスナーがフラグメントで機能しない

これをレイアウトに追加します

android:descendantFocusability="blocksDescendants"

于 2015-10-09T07:06:09.513 に答える
2

mListView.setOnItemClickListener@dheeraj-bhaskarが暗示したように、ListFragmentをフラグメントから拡張する場合、アクティビティが作成される前に呼び出されないことがわかっている場合、2つの素晴らしいソリューションがありました。このソリューションにより、アクティビティが作成されたときに確実に設定されます

@Override
    public void onActivityCreated(Bundle savedInstanceState)
    {
        super.onActivityCreated(savedInstanceState);
        mListView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long rowId) {
                // Do the onItemClick action

                Log.d("ROWSELECT", "" + rowId);
            }
        });
    }

ListFragment のソースコードを見ているときに、これに出くわしました

    public class ListFragment extends Fragment {
        ...........................................
     ................................................

        final private AdapterView.OnItemClickListener mOnClickListener
                = new AdapterView.OnItemClickListener() 
{
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
{
                onListItemClick((ListView)parent, v, position, id);
            }
        };
       .................................................................
    ........................................................................

    public void onListItemClick(ListView l, View v, int position, long id) 
{
        }
}

onItemClickListenerオブジェクトがアタッチonListItemClick() され、まったく同じように機能する他の同様のソリューションとして、オーバーライドすることを呼び出しますonListItemClick()

 @Override
        public void onListItemClick(ListView l, View v, int position, long rowId) {
            super.onListItemClick(l, v, position, id);
           // Do the onItemClick action

                    Log.d("ROWSELECT", "" + rowId);
        } 
于 2015-06-10T07:31:12.057 に答える
0

ワークフローの概要を次に示します。ListView対応する を作成Adapterし (基になるデータを ListView 内の項目にマップするために使用)、アダプタを ListView に設定し、それに を追加OnItemClickListenerします。

詳細とサンプル コードは、http: //developer.android.com/guide/topics/ui/declaring-layout.html#AdapterViewsにあります。

于 2013-02-15T17:37:28.363 に答える