`
aliusa
  • 浏览: 82332 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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


效果如图:





  • 大小: 69.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics