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>


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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值