【问题标题】:ListView with OnItemClickListenerListView与OnItemClickListener.
【发布时间】:2011-10-04 09:34:42
【问题描述】:

我正在使用自定义 ListViewRatingBarImageButton。这是我的问题:当我点击我的ListView 时,我的OnItemClickListener 不起作用。请任何人帮助我。 代码:

ListView lv = getListView();
setContentView(lv);
lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
        Toast.makeText(SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT).show();
    }
});

【问题讨论】:

  • 请添加一些代码。为什么不工作?出错了?
  • 我没有收到任何错误,即使正在调试它也没有进入..我会发布一些代码。
  • @gujjula nikhilreddy 发布一些代码。
  • 我之前已经检查过这个问题。
    查看我的文章查找原因和解决方法:xjaphx.wordpress.com/2011/07/14/…
    我猜你遇到了场景3。
  • 我在这篇文章中找到了答案,第一条评论:stackoverflow.com/questions/5551042/…

标签: android listview


【解决方案1】:

虽然是一个非常古老的问题,但我仍然会发布一个答案,以便它可以帮助一些人。 如果您在列表视图中使用任何布局,请使用 ...

android:descendantFocusability="blocksDescendants"    

... 在列表中的第一个父布局上。这就像魔术一样,点击不会被列表中的任何元素消耗,而是直接转到列表项。

【讨论】:

  • 太棒了。帮助很大
  • 它对我有用。当我添加上面的属性时,列表单击和按钮单击都可以工作。谢谢。
  • 太棒了!!回答..干杯:)
  • 谢谢。自 3 年以来,我一直在开发 Android 应用程序。从来没想过这个简单的技巧能奏效。
  • 被同一个问题困扰了一整天.. 非常感谢...永远猜不到
【解决方案2】:

我有一个扩展 ListActivity 的 Activity。

我尝试在 onCreate 中做这样的事情:

ListView listView = getListView();
listView.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

        Log.i("Hello!", "Y u no see me?");

    }

});

但这没有用。

相反,我只需要覆盖 onListItemClick:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {

    Log.i("Hello!", "Clicked! YAY!");

}

【讨论】:

    【解决方案3】:

    嘿,看看这个,对我有用...希望它也对你有用

    如果列表项包含ImageButton

    问题:OnItemClickListener 根本没有任何回应!

    原因:不知道

    解决方案:在代码中,将ImageButton的焦点设置为“false”

    1:ImageButton button = (ImageButton) convertView.findViewById(R.id.imageButton);

    2:button.setFocusable(false);

    【讨论】:

    • 救了我的命。谢谢
    【解决方案4】:

    如果您想在列表视图中启用项目点击,请使用

    listitem.setClickable(false);
    

    乍一看,这似乎是错误的,但它确实有效!

    【讨论】:

    • 如果在 XML 中执行此操作,请确保使实际的子(而不是父布局)不可点击。另外,这个答案应该更高!
    【解决方案5】:

    如果列表项视图包含按钮或复选框或图像按钮, onitemclicklistener 和 onitemlongclicklistener 不能正常工作,因为它有自己的 onclick 监听器。

    将可聚焦设置为 false

    holder.button.setFocusable(false);
    

    【讨论】:

      【解决方案6】:

      1) 检查您使用的是 OnItemClickListener 还是 OnClickListener(ListView 不支持)
      Documentation Android Developers ListView

      2) 检查是否将 Listener 正确添加到 ListView。它迷上了 ListView 而不是 ListAdapter!

      ListView.setOnItemClickListener(listener);
      

      3) 如果您需要使用 OnClickListener,请检查您是否使用了 DialogInterface.OnClickListenerView.OnClickListener(如果未验证或同时使用它们,则可以轻松交换)

      【讨论】:

      • 我正在使用的代码扩展了一个列表活动。这是我的代码列表视图 lv = getListView();设置内容视图(lv); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView> arg0, View arg1,int position, long arg3) { Toast.makeText(SuggestionActivity.this, "" + position, Toast.LENGTH_SHORT).show (); } }); }
      【解决方案7】:

      您也可以使用lambda。 Java 1.7 或更早的 JVM 不支持 Lambda 语法。

      listView.setOnItemClickListener((parent, view, position, id) -> {
          ...
      });
      

      【讨论】:

        【解决方案8】:
        listPaired = (ListView) findViewById( R.id.listView1 );
        listPairedData = new ArrayList < String >();
        araPaired = new ArrayAdapter( this, android.R.layout.simple_list_item_1, listPairedData );
        listPaired.setAdapter( araPaired );
        listPaired.setOnItemClickListener( listPairedClickItem );
        
        private OnItemClickListener listPairedClickItem = new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView < ? > arg0, View arg1, int arg2, long arg3) {
        
                String info = ( (TextView) arg1 ).getText().toString();
                Toast.makeText( getBaseContext(), "Item " + info, Toast.LENGTH_LONG ).show();
            }
        };
        

        【讨论】:

          【解决方案9】:

          像这样将ImageButton设置为false

          imagebutton.setClickable(false);
          

          然后对listview执行OnItemClickListener

          【讨论】:

            【解决方案10】:

            如果您以编程方式定义 ListView:

            mListView.setDescendantFocusability(ListView.FOCUS_BLOCK_DESCENDANTS);
            

            【讨论】:

              【解决方案11】:

              按照其他建议使用 Java

              listitem.setClickable(false);
              

              或者在xml中:

              android:clickable="false"
              

              效果很好

              【讨论】:

                【解决方案12】:

                您正在使用的列表视图中是否有图像> 然后点击链接: http://vikaskanani.wordpress.com/2011/07/20/android-custom-image-gallery-with-checkbox-in-grid-to-select-multiple/

                我认为,当您使用我首先提供的链接时,一切都会正常工作,我已经尝试过了。如果您想要一个精致的答案,请用代码和描述详细说明问题。

                【讨论】:

                  【解决方案13】:

                  只需将该行插入 RatingBar:

                  android:isIndicator="true"
                  

                  在 XML 中,评分栏看起来像这样。

                  <RatingBar
                      android:id="@+id/ratingBar"
                      android:layout_width="wrap_content"
                      android:layout_height="wrap_content"
                      android:layout_marginLeft="6dp"
                      android:isIndicator="true"
                      android:clickable="false"
                      android:focusable="false"
                      android:focusableInTouchMode="false" />
                  

                  【讨论】:

                    【解决方案14】:

                    Android OnItemClickLIsener 与 Adapter 中 listview 的行项的 OnClickListener 冲突。您只需要确保您的代码得到良好的管理并按照标准正确编写。

                    在下面给出的链接中检查答案:

                    Make list clickable

                    【讨论】:

                      【解决方案15】:
                      lv.setOnItemClickListener( new OnItemClickListener() {
                          @Override
                          public void onItemClick(AdapterView < ? > parent, View view,
                                                  int position, long id) {
                              // TODO Auto-generated method stub
                      
                          }
                      } );
                      

                      【讨论】:

                        【解决方案16】:

                        许多人问,如果您只寻找列表视图点击,列表中的孩子必须具有宽度“match_parent”。

                        即使您将“Focusable”设置为 false,它也不会起作用。 将孩子的 Width 设置为 wrap_content

                        <TextView
                            android:id="@+id/itemchild"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            ...
                        

                        【讨论】:

                          【解决方案17】:

                          我能提供的最简单的解决方案和最简单的方法就是这个。您只需要执行这两个步骤。

                          1.将其添加到您的 XML 文件中。

                              <ListView
                                  android:layout_width="match_parent"
                                  android:layout_height="wrap_content"
                                  android:layout_marginTop="8dp"
                                  android:id="@+id/list_view"
                                  android:layout_below="@+id/info_text"
                                  />
                          1. 将此添加到您的 MainActivity 文件中。

                                  ListView listView;
                                  listView = findViewById(R.id.list_view);
                          
                                  String[] fruits = new String[5];
                                  fruits[0]="hello";
                                  fruits[1]="hello";
                                  fruits[2]="hello";
                                  fruits[3]="hello";
                                  fruits[4]="hello";
                          
                                  List newList = new ArrayList(Arrays.asList(fruits));
                                  ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, newList);
                                  listView.setAdapter(arrayAdapter);
                          
                                  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                      @Override
                                      public void onItemClick(AdapterView parent, View view, int position, long id) {
                                          String selectedItem = (String) parent.getItemAtPosition(position);
                                          Toast.makeText(DisplayPannel.this, selectedItem, Toast.LENGTH_SHORT).show();            }
                                  });

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2015-08-01
                            • 2012-04-17
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多