自定义 ListView 上的 setOnItemClickListener

Posted

技术标签:

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

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

【问题讨论】:

【参考方案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】:

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

    listviewdemo.xml

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

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

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

    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。

希望对某人有所帮助!

【讨论】:

以上是关于自定义 ListView 上的 setOnItemClickListener的主要内容,如果未能解决你的问题,请参考以下文章

更改 ListView 上所选项目的背景颜色

带有 RadioButton 单选的自定义 ListView

如何在ListView项目的对话框中显示自定义消息

listview中的item是自定义的含有textview和edittext 还有button 点击listview外的按钮增加一个item问题

NavigationDrawer 上的自定义字体

防止黑莓10级联中listview标题上的onTriggered事件?