【问题标题】:setOnItemClickListener on custom ListView自定义 ListView 上的 setOnItemClickListener
【发布时间】:2011-06-10 05:45:45
【问题描述】:

我有一个自定义ListView。这个ListView 包含 1 个 Image 和 6 个 TextView。为了检索值,我创建了一个setOnItemClickListener(...)。每当我点击ListView 时,我如何才能真正从 6 个 TextViews 中检索所有数据?

【问题讨论】:

    标签: android listview


    【解决方案1】:

    如果在侦听器中您获得了项目的根布局(例如 itemLayout),并且您为 textviews 提供了一些 id,那么您可以使用类似 itemLayout.findViewById(R.id.textView1) 的内容来获取它们。

    【讨论】:

    • 非常感谢各位大佬。
    • @kangalert 不客气。请记住标记已接受的答案(单击答案旁边的复选标记),让人们知道这是一个有效的解决方案。它还提高了您和回答者的声誉:)
    【解决方案2】:

    示例代码:

    ListView list = (ListView) findViewById(R.id.listview);
    list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
       @Override
       public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
          Object listItem = list.getItemAtPosition(position);
       } 
    });
    

    在上面的示例代码中,listItem 应包含textView 的选定数据。

    【讨论】:

    • 伙计们,即使我在 onItemClick 中写了一个 toast,我也无法感觉到触摸它没有显示
    • @abhishek ,我也有同样的问题
    【解决方案3】:

    我也有同样的问题。。 如果我们在逻辑上稍微思考一下,我们就能得到答案。 它对我很有用.. 我希望你能得到它..

    1. listviewdemo.xml

      <ListView
          android:id="@+id/listview"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:paddingBottom="30dp"
          android:paddingLeft="10dp"
          android:paddingRight="10dp" />
      

    2. listviewcontent.xml - 注意TextView - android:id="@+id/txtLstItem"

      <LinearLayout
          android:id="@+id/listviewcontentlayout"
          android:layout_width="0dp"
          android:layout_height="fill_parent"
          android:layout_weight="1"
          android:orientation="horizontal">
      
          <ImageView
              android:id="@+id/img1"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginRight="6dp" />
      
          <LinearLayout
              android:layout_width="0dp"
              android:layout_height="fill_parent"
              android:layout_weight="1"
              android:orientation="vertical">
      
              <TextView
                  android:id="@+id/txtLstItem"
                  android:layout_width="match_parent"
                  android:layout_height="wrap_content"
                  android:gravity="left"
                  android:shadowColor="@android:color/black"
                  android:shadowRadius="5"
                  android:textColor="@android:color/white" />
      
          </LinearLayout>
      
          <ImageView
              android:id="@+id/img2"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginRight="6dp" />
      </LinearLayout>
      

    3. ListViewActivity.java - 注意 view.findViewById(R.id.txtLstItem) - 当我们通过setText() 方法将值设置为TextView 时,我们通过View 方法从TextView 获取文本,该对象由onItemClick 方法返回。 OnItemClick() 返回当前视图。

      TextView v=(TextView) view.findViewById(R.id.txtLstItem);
      Toast.makeText(getApplicationContext(), "selected Item Name is "+v.getText(), Toast.LENGTH_LONG).show();**
      

      使用这个简单的逻辑,我们可以得到其他值,例如CheckBoxRadioButtonImageView 等。

      ListView List = (ListView) findViewById(R.id.listview);
      cursor = cr.query(CONTENT_URI,projection,null,null,null);
      adapter = new ListViewCursorAdapter(ListViewActivity.this, R.layout.listviewcontent, cursor, from, to);
      
      cursor.moveToFirst();
      
      // Let activity manage the cursor
      startManagingCursor(cursor);
      
      List.setAdapter(adapter);
      List.setOnItemClickListener(new AdapterView.OnItemClickListener() {
              @Override
              public void onItemClick (AdapterView < ? > adapter, View view,int position, long arg){
                  // TODO Auto-generated method stub
                  TextView v = (TextView) view.findViewById(R.id.txtLstItem);
                  Toast.makeText(getApplicationContext(), "selected Item Name is " + v.getText(), Toast.LENGTH_LONG).show();
              }
          }
      );
      

    【讨论】:

      【解决方案4】:

      如果它对任何人有帮助,我发现问题是我的布局文件中已经有一个 android:onClick 事件(我为 ListView 行膨胀了)。这取代了 onItemClick 事件。

      【讨论】:

        【解决方案5】:

        如果上述答案不起作用,可能是您没有在自定义适配器的 getItem 方法中添加返回值,请参阅this 问题并查看第一个答案。

        【讨论】:

          【解决方案6】:

          很抱歉使用 Kotlin 进行编码。 但我遇到了同样的问题。 我用下面的代码解决了。

          list.setOnItemClickListener{ _, view, _, _ ->
                  val text1 = view.find<TextView>(R.id.~~).text
          
                  }
          

          你可以在“~~”中放一个显示你想要的TextView的id。

          希望对某人有所帮助!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多