seletctAll___利用ScrollView+RadioGroup+RadioButton实现相似互斥
假如你有多个匹配list,在这些匹配list中存在这样的一些匹配条目
a 匹配 b;
a 匹配 c;
a 匹配 d;
e 匹配 f
d 匹配 g;
加入你要实现实现select all,但有想实现相似条目互斥功能,
互斥的意思是:在上述条目中有关a的三个条目之间匹配条目只能存在一个,也就是
如果选择了
a 匹配 b,
那么a 匹配 c;
a 匹配 d;就自动把check状态值为false,
那么可以参照如下方式实现:
merge_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/item" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:padding="4dp"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="left" android:layout_alignParentLeft="true"> <RelativeLayout android:id="@+id/avatarLayout_1" android:layout_width="60dip" android:layout_height="60dip" android:background="@drawable/frame"> <ImageView android:id="@+id/avatar_1" android:layout_width="60dip" android:layout_height="60dip" android:layout_alignParentLeft="true" android:src="@drawable/default_avatar" /> <ImageView android:id="@+id/sns_type_icon_1" android:layout_width="25dip" android:layout_height="25dip" android:paddingRight="5dip" android:paddingLeft="3dip" android:layout_alignBottom="@id/avatar_1" android:layout_alignRight="@id/avatar_1" /> </RelativeLayout> <TextView android:layout_below="@+id/item" android:layout_toRightOf="@+id/avatarLayout_1" android:layout_centerVertical="true" android:paddingLeft="1dip" android:id="@+id/name_1" android:layout_width="60dip" android:layout_height="wrap_content" android:textSize="18dip" android:layout_weight="1" android:textColor="#ffffff" android:text="Contact1" /> </LinearLayout> <RadioButton android:id="@+id/link" android:layout_centerHorizontal="true" android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="right" android:layout_alignParentRight="true"> <TextView android:layout_below="@+id/item" android:layout_centerVertical="true" android:paddingRight="1dip" android:id="@+id/name_2" android:layout_width="60dp" android:layout_height="wrap_content" android:textSize="18dip" android:layout_weight="1" android:textColor="#ffffff" android:text="Contact2" /> <RelativeLayout android:id="@+id/avatarLayout_2" android:layout_width="60dip" android:layout_height="60dip" android:background="@drawable/frame"> <ImageView android:id="@+id/avatar_2" android:layout_width="60dip" android:layout_height="60dip" android:layout_alignParentLeft="true" android:src="@drawable/default_avatar" /> <ImageView android:id="@+id/sns_type_icon_2" android:layout_width="25dip" android:layout_height="25dip" android:paddingRight="5dip" android:paddingLeft="3dip" android:layout_alignBottom="@id/avatar_2" android:layout_alignRight="@id/avatar_2" /> </RelativeLayout> </LinearLayout></RelativeLayout>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/group" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" ></LinearLayout>
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <ScrollView android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginBottom="60dp"> <LinearLayout android:id="@+id/merge_list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation = "vertical"> </LinearLayout> </ScrollView> <RelativeLayout android:id="@+id/merge_bottom_bar" android:layout_width="fill_parent" android:layout_height="60dp" android:background="@drawable/bar" android:gravity="center_vertical" android:orientation="horizontal" android:layout_alignParentBottom="true"> <CheckBox android:id="@+id/selectedAll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="All" android:textColorHighlight="#ff00ff00" android:layout_marginLeft="10dp" android:layout_alignParentLeft="true" android:layout_alignLeft="@+id/merge_bottom_bar" android:layout_alignParentBottom="true" /> <Button android:id="@+id/btn_ok" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:layout_toLeftOf="@+id/btn_cancel" android:text="Save" android:layout_alignParentBottom="true" /> <Button android:id="@+id/btn_cancel" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignRight="@+id/merge_bottom_bar" android:layout_marginRight="10dp" android:text="Cancel" android:layout_alignParentBottom="true" /> </RelativeLayout></RelativeLayout></LinearLayout>
import aliusa.cn.R;import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.LayoutInflater;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.RadioButton;import android.widget.RelativeLayout;import android.widget.TextView;import android.widget.CompoundButton.OnCheckedChangeListener;import java.util.ArrayList;/** * This example shows how to use choice mode on a list. This list is * in CHOICE_MODE_SINGLE mode, which means the items behave like * checkboxes. */public class List11 extends Activity { /** The similar_group_list. */ private ArrayList<SimilarGroup> list_similarGroup = new ArrayList<SimilarGroup>(); /** The merge group list layout. */ private LinearLayout layoutSimilarGroupList; /** The Constant CODE_MERGE_SUBMIT. */ public static final int CODE_MERGE_SUBMIT = 1; /** * The Class SimilarItem. */ public class SimilarItem { /** The avatar_1. */ public ImageView avatar_1; /** The avatar_2. */ public ImageView avatar_2; /** The name_1. */ public TextView name_1; /** The name_2. */ public TextView name_2; /** The sns type icon_1. */ public ImageView snsTypeIcon_1; /** The sns type icon_2. */ public ImageView snsTypeIcon_2; /** The check box. */ public RadioButton checkBox; /** The at similar group list position. */ public int atSimilarGroupListPosition; /** * Checks if is check. * * @return true, if is check */ public boolean isCheck() { return checkBox.isChecked(); } /** * Instantiates a new similar item. * * @param row the row * @param contact1 the contact1 * @param contact2 the contact2 * @param context the context */ public SimilarItem(RelativeLayout row,String name,Context context) { this.avatar_1 = (ImageView) row.findViewById(R.id.avatar_1); this.name_1 = (TextView) row.findViewById(R.id.name_1); this.snsTypeIcon_1 = (ImageView) row.findViewById(R.id.sns_type_icon_1); this.checkBox = (RadioButton) row.findViewById(R.id.link); this.avatar_2 = (ImageView) row.findViewById(R.id.avatar_2); this.name_2 = (TextView) row.findViewById(R.id.name_2); this.snsTypeIcon_2 = (ImageView) row.findViewById(R.id.sns_type_icon_2); //avatar this.avatar_1.setBackgroundResource(R.drawable.default_avatar); this.avatar_2.setBackgroundResource(R.drawable.default_avatar); //name this.name_1.setText(name); this.name_2.setText(name+"_2"); } } /** * Adds the similar item. * * @param atSimilarGroupListPosition the at similar group list position * @param parrent the parrent * @param contact1 the contact1 * @param contact2 the contact2 * @param context the context * @return the similar item */ public SimilarItem addSimilarItem(int atSimilarGroupListPosition,LinearLayout parrent,final Context context) { LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final RelativeLayout row = (RelativeLayout)inflater.inflate(R.layout.merge_item,null); final SimilarItem item = new SimilarItem(row,"Si"+atSimilarGroupListPosition, context); item.atSimilarGroupListPosition = atSimilarGroupListPosition; parrent.addView(row); System.out.println("MergeList.addSimilarItem"); return item; } /** * The Class SimilarGroup. */ public class SimilarGroup{ /** The similar_item_ list. */ private ArrayList<SimilarItem> similar_item_List = new ArrayList<SimilarItem>(); /** * Instantiates a new similar group. */ public SimilarGroup() { } /** * Select first. * * @param isChecked the is checked */ public void selectFirst(boolean isChecked) { similar_item_List.get(0).checkBox.setChecked(isChecked); System.out.println("MergeList.selectFirst isChecked=" + isChecked); } /** * Gets the checked position. * * @return the checked position */ public int getCheckedPosition() { for (int i = 0; i < similar_item_List.size(); i++) { if (similar_item_List.get(i).isCheck()) { return i; } } return -1; } } /** * Adds the similar group. * * @param parrent the parrent * @param similarListOfLocal the similar list of local * @param sns the sns * @param context the context * @return the similar group */ public SimilarGroup addSimilarGroup(LinearLayout parrent, Context context) { final SimilarGroup similarGroup = new SimilarGroup(); final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); final LinearLayout group = (LinearLayout) inflater.inflate(R.layout.merge_group,null); final int lengthOfSimiarGroupList = list_similarGroup.size(); final LinearLayout groupLinearLayout = (LinearLayout) group.findViewById(R.id.group); for (int i = 0; i < 3; i++) { final SimilarItem similarItem = addSimilarItem(lengthOfSimiarGroupList, groupLinearLayout, context); similarItem.checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { for (int i = 0; i < similarGroup.similar_item_List.size(); i++) { final SimilarItem similarItemOfGroup = similarGroup.similar_item_List.get(i); if (similarItem.checkBox != similarItemOfGroup.checkBox) { similarItemOfGroup.checkBox.setChecked(false); } } } } }); similarGroup.similar_item_List.add(i, similarItem); } parrent.addView(group); System.out.println("MergeList.addSimilarGroup"); return similarGroup; } /** * Select all. * * @param isChecked the is checked */ public void selectAll(boolean isChecked){ for (int i = 0; i < list_similarGroup.size(); i++) { list_similarGroup.get(i).selectFirst(isChecked); } } /* (non-Javadoc) * @see android.app.Activity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.merge_list); layoutSimilarGroupList = (LinearLayout) this.findViewById(R.id.merge_list); //init similar list list_similarGroup.clear(); for(int i = 0; i < 5; i++) { list_similarGroup.add(addSimilarGroup(layoutSimilarGroupList,this)); } //setBtnEvent(); final CheckBox selectAll = (CheckBox) this.findViewById(R.id.selectedAll); selectAll.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { selectAll(isChecked); } }); selectAll.setChecked(true); final Button cancel = (Button) findViewById(R.id.btn_cancel); cancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); final Button ok = (Button) findViewById(R.id.btn_ok); ok.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); super.onCreate(savedInstanceState); }}