`
aliusa
  • 浏览: 84267 次
  • 性别: 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
分享到:
评论

相关推荐

    ScrollView+TabLayout+ViewPager+RecyclerView 嵌套实现布局

    手动实现仿京东发现页面效果,使用布局嵌套完成,包括ScrollView+TabLayout+ViewPager+RecyclerView,最后有遗留问题需要处理。详情见博客https://blog.csdn.net/hq942845204/article/details/88844272

    unity3d_5_3_6__UGUI_ScrollView重复利用优化资源item

    unity3d_5_3_6 UGUI ScrollView 重复利用 优化资源item 学习链接:http://blog.csdn.net/mutou_222/article/details/50455729

    Super+ScrollView+for+UGUI+v2.2.2

    Super ScrollView for UGUI listview集合,非常不错的控件

    viewpaper+fragment+radiobutton

    `RadioButton`通常与`RadioGroup`一起使用,`RadioGroup`会管理其包含的所有`RadioButton`,确保同一时间内只有一个按钮被选中。通过监听`RadioGroup`的`onCheckedChangeListener`,开发者可以获取用户的选择并执行...

    ScrollView+LinearLayout 仿Listview 效果

    要实现ListView的效果,我们需要创建一个包含多个相同或相似布局的LinearLayout,每个布局代表ListView的一个条目。以下是一些关键步骤: 1. **创建条目布局**: 在res/layout目录下创建一个新的XML布局文件,例如`...

    Android ScrollView嵌套TabLayout+ViewPager

    亲测成功,可以直接嵌套项目中 ScrollView嵌套TabLayout+ViewPager解决滑动冲突,已进行重点标注 ViewPager会根据frament的界面高度进行展示,进行framnet的高度测量 嵌套冲突已全部解决

    ScrollView+LinearLayout模拟ListView

    有时候项目在ListView中需要显示EditText,CheckBox等控件,这样就会出现一个问题,滑动时或失去焦点时编辑信息混乱。...这里提供了令一种解决方法,ScrollView,+LinearLayout模拟ListView完美解决。

    Scrollview+ViewPager(自动滚动)

    Scrollview+ViewPager(自动滚动) 一个界面类,2个重写View类,一个实体类,一个适配器类 实现了Scrollview下桥套ViewPager自动滚动,如果需要下拉刷新,自己可以替换成其它的开源控件

    仿drippler详情页效果(scrollview阻尼+layout浮动)

    在Android开发中,"仿drippler详情页效果"通常是指实现类似Drippler应用的滚动体验,这种体验包括ScrollView的阻尼效果和布局的浮动行为。这些特性为用户提供了更加自然、流畅的交互体验。下面我们将详细探讨这两个...

    网易布局viewpager+fragment+scrollview+recycleview

    【标题】:“网易布局viewpager+fragment+scrollview+recycleview”揭示了这个项目是关于如何在Android应用中整合并高效使用这些组件的实例。ViewPager通常用于实现页面滑动效果,Fragment则允许在单个Activity中...

    Super+ScrollView+for+UGUI+2.2.2.zip

    《Unity 3D中的Super ScrollView插件深度解析与应用实践》 Unity 3D作为一款强大的游戏开发引擎,其用户界面(UI)系统在不断进化,UGUI的出现极大地提升了UI设计的灵活性和效率。然而,在开发过程中,尤其是在构建...

    安卓Android事件分发处理 scrollview套scrollview+scrollview.其中viewpager下套listview 带悬浮框效果

    安卓Android事件分发处理 scrollview套scrollview+scrollview.其中viewpager下套listview 带悬浮框效果 viewpager可以左右切换。整体可上下滑动,当滑动到悬浮框的位置,嵌套的listview 可以滑到,悬浮停留在顶部。...

    ScrollView+ViewPager+ListView或RecyclerView

    在Android开发中,`ScrollView`、`ViewPager`和`ListView`或`RecyclerView`是常见的UI组件,它们分别用于实现不同的滚动视图效果。本篇将深入探讨如何将这些组件组合使用,尤其是涉及到“加载更多”功能的实现。 ...

    scrollview+viewPager+listview

    标题"scrollview+viewPager+listview"揭示了这样一个需求:在一个布局中同时使用这三个组件。下面我们将详细探讨这些组件以及如何在实际项目中进行整合。 `ScrollView`是Android中的一个容器,它允许用户滚动其内部...

    Super+ScrollView+for+UGUI+2.2.2.7z

    《Super ScrollView for UGUI:深度解析与应用指南》 Unity引擎在开发2D和3D游戏及交互式应用时,提供了强大的图形用户界面(UGUI)系统,它为开发者提供了丰富的UI元素和交互方式。然而,在处理大量滚动数据或者...

    基于Android的下拉刷新控件(ListView好ScrollView版+毕业设计).zip

    对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步...

    ScrollView+TableView滑动分层效果

    要实现"ScrollView+TableView滑动分层效果",我们首先要将TableView作为ScrollView的子视图进行添加。这可以通过代码或者Interface Builder完成。然后,我们需要监听ScrollView的滚动事件,当用户上拉时,隐藏或缩小...

    ScrollView + AutoResponsive 实例Demo

    1.存ReactNative 代码文件,该代码是ES6+语法,建议先建一个ReactNative项目,将该文件拷贝进去,查看效果。 2.文件对应博客地址: https://blog.csdn.net/li11_/article/details/81875387

    scrollview+ textfield demo

    本项目"scrollview+ textfield demo"是一个示例,展示了如何在ScrollView中集成TextField和TextView,使得在输入文本时,ScrollView能够智能地调整其内容,避免键盘遮挡输入区域,从而提供良好的用户体验。...

Global site tag (gtag.js) - Google Analytics