抱歉标题不好。
我在运行时向列表视图添加了一个切换按钮。 当我点击按钮时,它的状态会发生变化。但问题是当我向下滚动其他项目时也会被选中。
例如,如果点击第一个切换按钮,也会检查第6个切换按钮。
这是一种非常奇怪的行为。
以下是acitivty
的XML代码 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/title_bar"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/eros_now_title_bar">
<ImageView
android:id="@+id/back_button_image"
android:layout_width="@dimen/toolbar_imageview_width_height"
android:layout_height="@dimen/toolbar_imageview_width_height"
android:layout_centerVertical="true"
android:layout_margin="@dimen/back_image_margin"
android:src="@drawable/ic_arrow_back" />
<ImageButton
android:id="@+id/back_button"
android:layout_width="@dimen/toolbar_imagebutton_width_height"
android:layout_height="@dimen/toolbar_imagebutton_width_height"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
android:background="@drawable/npd_back_feedback" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/back_button_image"
android:layout_toRightOf="@+id/back_button"
android:fontFamily="sans-serif-regular"
android:text="Invite friends"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
<EditText
android:id="@+id/search_text"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_below="@+id/title_bar"
android:layout_margin="15dp"
android:hint="Search"
android:textColorHint="@color/hint_color"
android:drawableRight="@drawable/search_blue_white"/>
<ListView
android:id="@+id/friends_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/search_text"
android:layout_above="@+id/invite_count_view"
android:layout_marginTop="15dp"
android:divider="@color/transparent">
</ListView>
<RelativeLayout
android:id="@+id/invite_count_view"
android:layout_width="match_parent"
android:layout_height="56dp"
android:layout_alignParentBottom="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="sans-serif-light"
android:textSize="18sp"
android:textColor="@color/eros_now_title_bar"
android:text="10 more invites to go"
android:layout_centerInParent="true"
/>
</RelativeLayout>
</RelativeLayout>
以下是我在适配器中充气的视图的XML代码
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<com.makeramen.roundedimageview.RoundedImageView
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/person_pic"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_marginLeft="26dp"
android:layout_centerVertical="true"
app:riv_corner_radius="50dip"
android:src="@drawable/ic_person_grey600_36dp"/>
<TextView
android:id="@+id/name"
android:layout_width="150dp"
android:layout_height="wrap_content"
android:singleLine="true"
android:layout_toRightOf="@+id/person_pic"
android:layout_marginLeft="17dp"
android:layout_centerVertical="true"
android:textColor="@color/black"
android:fontFamily="sans-serif-regular"
android:textSize="16sp"
android:text="Grumpy brother"
android:ellipsize="end"/>
<!--<ToggleButton-->
<!--android:layout_width="wrap_content"-->
<!--android:layout_height="wrap_content"-->
<!--android:layout_alignParentRight="true"-->
<!--android:layout_marginRight="35dp"-->
<!--android:layout_centerVertical="true"-->
<!--android:background="@drawable/invite_selector"-->
<!--android:textOn=""-->
<!--android:textOff=""-->
<!--android:text="" />-->
</RelativeLayout>
这是getView的代码
public View getView(int i, View convertView, ViewGroup parent) {
Log.e("getView", "name = " + contacts.get(i).getName());
if (convertView == null) {
convertView = LayoutInflater.from(activity).inflate(R.layout.friend_view, parent, false);
}
TextView name = (TextView) convertView.findViewById(R.id.name);
RoundedImageView image = (RoundedImageView) convertView.findViewById(R.id.person_pic);
ToggleButton selector = new ToggleButton(activity);
if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN)
selector.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.ic_add_black_24dp));
else
selector.setBackground(activity.getResources().getDrawable(R.drawable.ic_add_black_24dp));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
params.addRule(RelativeLayout.ALIGN_PARENT_END, RelativeLayout.TRUE);
params.setMargins(0, 0, getPx(35), 0);
selector.setLayoutParams(params);
selector.setTextOff("");
selector.setText("");
selector.setTextOn("");
selector.setOnCheckedChangeListener(this);
selector.setTag(String.valueOf(i));
selector.setChecked(contacts.get(i).getSelectedState());
contacts.get(i).setButton(selector);
RelativeLayout card = (RelativeLayout) convertView.findViewById(R.id.card_view);
card.addView(selector);
try {
Bitmap bitmap = MediaStore.Images.Media.getBitmap(activity.getContentResolver(), contacts.get(i).getURI());
} catch (IOException e) {
contacts.get(i).setURI(Uri.parse(""));
}
name.setText(contacts.get(i).getName());
if (!contacts.get(i).getURI().toString().equals(""))
image.setImageURI(contacts.get(i).getURI());
else
image.setImageDrawable(activity.getResources().getDrawable(R.drawable.ic_person));
return convertView;
}
答案 0 :(得分:0)
我看到您使用 contacts.get(i).getSelectedState()在 getview 中设置ToggleButton状态。
您是否使用 Adapter.notifyDatasetChanged()来更新列表视图的状态?
如果没有,请在切换按钮后添加该代码。
答案 1 :(得分:0)
因为您的项视图被重用,所以如果convertView为null,则只创建ToggleButton。如果convertView不为null,则从convertView获取并设置它的属性。
使用setTag和findViewWithTag来识别您的ToggleButton。