2

Android アプリケーションに ListFragment がありますが、動作するようになりましたが、OnClick リスナーが動作していません。リストの項目が選択されたときにトーストが表示され、それが発生しないようにしようとしました。エラーがないので、投稿する LogCat がありません

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // TODO Auto-generated method stub

    View v = inflater.inflate(R.layout.main, container, false);

    ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();


//...

    ListAdapter adapter = new SimpleAdapter(getActivity(), menuItems,
            R.layout.list_item,
            new String[] { KEY_NAME, KEY_DESC, KEY_COST }, new int[] {
                    R.id.name, R.id.desciption, R.id.cost });

    setListAdapter(adapter);

    ListView lv = (ListView)v.findViewById(android.R.id.list);

    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem

            Toast.makeText(getActivity().getApplicationContext(), "Not Configured",
                    Toast.LENGTH_SHORT).show();

        }
    });

    return v;
}

ありがとう

4

5 に答える 5

2

ListFragmentサブクラスには既にメソッドがありますoverriden onListItemClick

ドキュメントは言う

This method will be called when an item in the list is selected. Subclasses should override

したがって、リストビュー用に別のリスナーを宣言する必要はありません。

于 2013-09-24T11:18:21.710 に答える
0

置く

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

あなたの行のすべてのアイテムに

于 2014-11-28T01:58:15.710 に答える
0

削除.getApplicationContext()するとうまくいくはずです。私が作成したアプリから、あなたに似たコードがいくつかあります。問題なく動作しますが、フラグメント内からも同様です。ただし、このdb.removeコードはデータベースを使用するアプリ用に記述されているため、コードとはおそらく無関係です。new OnItemClickListenerまた、変更してみてくださいnew AdapterView.OnItemClickListener

    listItem.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            db.remove( (int) l);
            Toast.makeText(getActivity(), "Item Deleted", Toast.LENGTH_LONG).show();
        }
    });

それがうまくいかない場合は、次のような Context インスタンス変数を作成してみてください。

private Context ctx = getActivity();

また

private final Context ctx = getActivity();

ただし、これまで ListFragments を使用したことがないため、私が書いたものが機能するかどうかはわかりません。

于 2013-08-02T06:24:53.793 に答える