【问题标题】:I have a button in a listview and when clicked all its instances are being clicked我在列表视图中有一个按钮,单击时它的所有实例都被单击
【发布时间】:2014-01-05 19:49:31
【问题描述】:

我有一个包含按钮的列表视图和一个文本视图,该文本视图被正常点击;但是我有一个按钮单击的方法,当单击按钮时,它应该更改背景图像,因此通过单击按钮,按钮的所有实例都在更改背景图像,因此我单击列表视图中的 fiew 按钮和我向下滚动,我看到几个按钮的背景图像发生了变化,而不是按钮的位置发生了变化,同时再次向上滚动列表视图; 我该如何解决?

我的listview内容的代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

  <Button
    android:id="@+id/bt_rating" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"
    android:background="@android:drawable/btn_star_big_off"
     android:onClick="myClickHandler"/>

<TextView

android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textSize="@dimen/fsinlistview"

 />
</LinearLayout>

我的按钮点击代码是:

public void myClickHandler(View v) 
     {


    Button button = (Button)v.findViewById(R.id.bt_rating);     
    button.setBackgroundResource(android.R.drawable.btn_star_big_on);


     }

【问题讨论】:

  • myClickHandler 方法的代码是什么样的?

标签: android listview button


【解决方案1】:

您正在为具有R.id.bt_rating id 的 所有 按钮指定背景资源,因为您想修改被 单击 的按钮。 p>

您已经有一个引用 - 它是传入的 View

将您的代码更改为:

public void myClickHandler(View v) 
{   
    v.setBackgroundResource(android.R.drawable.btn_star_big_on);
}

当然,由于您使用的是列表视图,因此一旦您滚动/过去,它就不会保持状态。你应该做的是:

  1. 更新支持适配器的数据
  2. 在适配器上调用notifyDataSetChanged
  3. 处理适配器中的按钮开/关状态显示getView

【讨论】:

  • 当我调用 v.setbackgroundRessource 时......我在调用几个按钮时得到了相同的结果......
  • 如果您使用SimpleAdapterArrayAdapter,您必须学习如何实现自己的BaseAdapter。如果您已经在使用自定义适配器,那么您的 getView 方法不会更新提供的 convertView
  • 发生的事情是您正在更改按钮的状态,然后视图从屏幕上滚动出来,被“回收”/重复使用,并且按钮仍处于与之前相同的状态离开屏幕 - 适配器仅更新行的其他部分。
  • 您需要扩展SimpleCursorAdapter 以修改getView 方法中的视图,或者(最好)实现ViewBinder
  • manyexamplesavailable。如果您仍然无法使其正常工作,您应该使用遇到问题的代码打开一个新问题。
【解决方案2】:

将 setOnclickListener 放入适配器的 getView 方法中

【讨论】:

    猜你喜欢
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-17
    • 2022-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2022-12-18
    相关资源
    最近更新 更多