【问题标题】:ListView onItemClickListener doesnt do anythingListView onItemClickListener 不做任何事情
【发布时间】: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_width="fill_parent"
    android:layout_height="fill_parent"
    />

我的 java 代码在 ListFragment 的 onCreateView 中

【问题讨论】:

  • 你的断点是在新的 Intent 行并且没有被调用吗?
  • 是的!我在 OnClickListener 中无法访问任何内容。
  • 由于您使用的是简单的适配器,请查看此链接stackoverflow.com/questions/8418255/…
  • 我尝试使用 getListView() 但它给了我一个错误
  • 这是整个方法。我只跳过 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 并返回 rootView;

标签: android listview android-fragments android-listview android-listfragment


【解决方案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_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'
  • 我说的方法和基础也是正确的方法。
  • ListFragment 方法不对! - 当主视图是 ListView (getView() (这也暗示 onCreateView) 返回 ListView - 这也暗示时,您可以在 ListFragment 中拥有自己的主 ListView id 的唯一情况是不需要自己的id)请分析ListFragment!
猜你喜欢
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多