ListView的onItemClickListener没有任何反应

3

我有一个被用作标签的ListFragment。我正在尝试在我的ListView上使用OnItemSelectedListener,它必须根据所选项目启动另一个活动并在意图中放置特定的额外内容。我正在使用以下代码:

View rootView = inflater.inflate(R.layout.fragment_priority_tab, container, false);
    ListView listView = (ListView) rootView.findViewById(android.R.id.list);
    List<String> printedList = calculateProportions();
    ArrayAdapter<String> expensesAdapter = new ArrayAdapter<>(mContext,
            android.R.layout.simple_list_item_1, printedList);
    listView.setAdapter(expensesAdapter);
    listView.setClickable(true);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
            Intent intent = new Intent(mContext, ListPriority.class);
            switch (position) {
                case 0:
                    intent.putExtra("priority", "low");
                    startActivity(intent);
                    break;
                case 1:
                    intent.putExtra("priority", "med");
                    startActivity(intent);
                    break;
                case 2:
                    intent.putExtra("priority", "high");
                    startActivity(intent);
                    break;
                case 3:
                    intent.putExtra("priority", "obsolete");
                    startActivity(intent);
                    break;
            }
        }
    });

我没有任何错误或警告,但我的活动没有启动。当我调试应用程序并单击任何项时,甚至都没有达到我的断点。

我的XML中的ListView:

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    />

我的Java代码是在ListFragment的onCreateView()方法中。


你的断点是否在新的 Intent 行上,但它没有被调用? - Nanoc
是的,我无法在我的OnClickListener中访问任何内容。 - Angel
由于您正在使用简单适配器,请查看此链接http://stackoverflow.com/questions/8418255/add-onclick-listener-on-android-listview-with-simpleadapter。 - Xjasz
我尝试使用getListView(),但它给了我一个错误。 - Angel
1
这是整个方法。我只跳过 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 和 return rootView; - Angel
我没有super.onCreateView(),也没有在任何地方使用getView()。 - Angel
2个回答

3

ListFragment 可以自行处理其 OnItemClickListener。不需要设置监听器,而是重写onListItemClick() 方法。


... 这是在 onViewCreated 中设置的 ... 它会移除先前的 ListView OnItemClickListener ... 很好的发现 :) - Selvin
你说得对,伙计!这解决了我的问题。我从来没有听说过这个!谢谢,我学到了新东西! - Angel
同样地,您可以使用ListFragment.setListAdapter()而不是直接在列表上调用setAdapter()ListFragment的设计通常不需要直接操作列表。 - RussHWolf

0
在你的Java类中,你的ID声明是错误的: 改为,
ListView listView = (ListView) rootView.findViewById(android.R.id.list);

ListView listView = (ListView) rootView.findViewById(R.id.list);

你的xml id声明是错误的:

请更改为,

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<ListView
    android:id="@+id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

只需尝试一下... 很明显这样的修改将抛出“Your content must have a ListView whose id attribute is 'android.R.id.list'”错误。 - Selvin
我所说的方法和基本原则也是做这件事情的正确方式。 - Parth Bhayani
1
对于 ListFragment 来说,这不是正确的方法!唯一可以为主 ListView 拥有自己的 ID 的情况是当主视图是一个 ListView 时(getView()(这意味着也包括 onCreateView)返回 ListView - 这也意味着没有必要拥有自己的 ID),请分析 ListFragment - Selvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接