假如你有多个匹配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
merge_group.xml
merge_list.xml
List11.java
效果如图:
[img]http://dl.iteye.com/upload/attachment/475884/bc638857-5c10-3866-8e9c-e2f242e8b4fe.png[/img]
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>
merge_group.xml
<?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>
merge_list.xml
<?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>
List11.java
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);
}
}
效果如图:
[img]http://dl.iteye.com/upload/attachment/475884/bc638857-5c10-3866-8e9c-e2f242e8b4fe.png[/img]