我在listview中有一个按钮,当点击它时,它的所有实例都被点击了

时间:2014-01-05 19:49:32

标签: android listview button

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

我的列表视图内容的代码:

<?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);


     }

2 个答案:

答案 0 :(得分:0)

您正在使用R.id.bt_rating ID为所有按钮指定后台资源,您可以在其中修改点击的按钮

您已经有了对它的引用 - 它是传入的View

将您的代码更改为:

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

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

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

答案 1 :(得分:0)

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