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 不做任何事情的主要内容,如果未能解决你的问题,请参考以下文章

vb listview控件问题

ListView 包含 ListView

在一个listview中嵌套ListView可以吗?

求助scrollview嵌套viewpager 放listview 不能滑动

c# listview 怎么添加图片

Android listview 的用法? 越详细越好。