ListView onItemClickListener 不做任何事情
Posted
技术标签:
【中文标题】ListView onItemClickListener 不做任何事情【英文标题】:ListView onItemClickListener doesnt do anything 【发布时间】:2016-02-15 04:31:38 【问题描述】:我有一个 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
android:id="@android:id/list"
android:layout_
android:layout_
/>
我的 java 代码在 ListFragment 的 onCreateView 中
【问题讨论】:
你的断点是在新的 Intent 行并且没有被调用吗? 是的!我在 OnClickListener 中无法访问任何内容。 由于您使用的是简单的适配器,请查看此链接***.com/questions/8418255/… 我尝试使用 getListView() 但它给了我一个错误 这是整个方法。我只跳过 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 并返回 rootView; 【参考方案1】:ListFragment
处理自己的OnItemClickListener
。不要设置监听器,而是覆盖onListItemClick()
【讨论】:
... 设置在onViewCreated
... 并删除了以前的 ListView OnItemClickListener
... 很好的发现:)
你是对的伙计!这解决了我的问题。我从来没有听说过!谢谢,我学到了新东西!
同样,您可以使用ListFragment.setListAdapter()
而不是直接在您的列表中调用setAdapter()
。 ListFragment
的设计使您通常不需要直接触摸列表。【参考方案2】:
在你的 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_
android:layout_ />
到
<ListView
android:id="@+id/list"
android:layout_
android:layout_ />
【讨论】:
试试吧……显然这样的修改会抛出Your content must have a ListView whose id attribute is 'android.R.id.list'
我说的方法和基础也是正确的方法。
ListFragment
方法不对! - 当主视图是 ListView
(getView()
(这也暗示 onCreateView
) 返回 ListView
- 这也暗示时,您可以在 ListFragment
中拥有自己的主 ListView
id 的唯一情况是不需要自己的id)请分析ListFragment!以上是关于ListView onItemClickListener 不做任何事情的主要内容,如果未能解决你的问题,请参考以下文章