zoukankan      html  css  js  c++  java
  • cathome 猫家 开发日记-数据选择器

    概述:

    1.item 必须复用。也就是adapter要自定义。

    2.自定义adapter提供多种viewgroup使用,所以所有显示样式和逻辑放入adapter,

    3.自定义adapter提供多种viewgroup使用,但自定义adapter本身并不是一个类似simpleadapter,可二次定制的 adapter.固定了layout

    4. 触发事件,交给viewgroup  。但事件逻辑交给adapter.

    所以开发

    1.定义数据结构。

    2.定义item layout

    3.自定义 于基类baseadapter.

    4.建立普通activity,使用gridview,listview 进行测试。

    1.数据结构

    public class LSStructDisplayValue
    {
        public String display;
        public int intValue;
    }

    2.定义item layout

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">
        <TextView android:id="@+id/tvik" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="20dp" android:layout_marginTop="15dp" android:text="TextView" style="@style/TextStyleRadioUnSelected" />
    </RelativeLayout>

    3.自定义 于基类baseadapter.

    package com.linson.android.studyapp.Adapter;
    
    import android.content.Context;
    import android.graphics.Color;
    import android.support.annotation.IdRes;
    import android.support.annotation.LayoutRes;
    import android.support.annotation.NonNull;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.SimpleAdapter;
    import android.widget.TextView;
    
    import com.linson.LSLib.CommonFunction.LSStructDisplayValue;
    import com.linson.android.studyapp.R;
    
    import java.util.List;
    import java.util.TreeMap;
    
    
    //1.layout R.layout.girdview_textview 2.data:LSStructDisplayValue
    public class SelectorAdapter extends BaseAdapter
    {
        public enum  SingleOrMultiple
        {
            singler,
            multiple
        }
    
        private Context mContext;
        private List<LSStructDisplayValue> mData;
        private List<LSStructDisplayValue> mSelected;
        private SingleOrMultiple mtype;
    
        public SelectorAdapter(Context context, List<LSStructDisplayValue> data,List<LSStructDisplayValue> preSelected,SingleOrMultiple type)
        {
            mContext=context;
            mData=data;
            mSelected=preSelected;
            mtype=type;
        }
    
        @Override
        public int getCount()
        {
            return mData.size();
        }
    
        @Override
        public Object getItem(int position)
        {
            return mData.get(position);
        }
    
        @Override
        public long getItemId(int position)
        {
            return position;
        }
    
        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            View itemView=View.inflate(mContext,R.layout.girdview_textview, null);
            TextView tv=itemView.findViewById(R.id.tvik);
            tv.setText(mData.get(position).display);
            if(IsContian(mSelected, mData.get(position).intValue))
            {
                tv.setTextColor(mContext.getResources().getColor(R.color.color_cat_green));
            }
            else
            {
                tv.setTextColor(mContext.getResources().getColor(R.color.color_cat_grey));
            }
            return itemView;
        }
    
        private boolean IsContian(List<LSStructDisplayValue> data ,int value)
        {
            boolean ret=false;
            for(LSStructDisplayValue item :  data)
            {
                if(item.intValue==value)
                {
                    ret=true;
                    break;
                }
            }
            return ret;
        }
    
        public void ChangeSelector(int positon)
        {
            if(mtype==SingleOrMultiple.singler)
            {
                mSelected.clear();
                mSelected.add(mData.get(positon));
            }
            else if(mtype==SingleOrMultiple.multiple)
            {
                boolean isContain=false;
                int existPosition=-1;
                for(int i=0;i<mSelected.size();i++)
                {
                    if(mSelected.get(i).intValue==mData.get(positon).intValue)
                    {
                        isContain=true;
                        existPosition=i;
                        break;
                    }
                }
                if(isContain)
                {
                    mSelected.remove(existPosition);
                }
                else
                {
                    mSelected.add(mData.get(positon));
                }
            }
        }
    }

    4.建立普通activity,使用gridview,listview 进行测试。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent" android:layout_height="match_parent">
    
        <GridView android:id="@+id/testgv" android:numColumns="2"
            android:layout_width="match_parent" android:layout_height="108dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="0dp" android:layout_marginTop="19dp" />
    
        <ListView
            android:id="@+id/testlv" android:layout_width="match_parent" android:layout_height="171dp" android:layout_alignParentStart="true" android:layout_alignParentTop="true" android:layout_marginStart="0dp" android:layout_marginTop="152dp" />
    </RelativeLayout>
    final SelectorAdapter gvadapter=new SelectorAdapter(this, mm,sele , SelectorAdapter.SingleOrMultiple.singler);
            gv.setAdapter(gvadapter);
            gv.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    gvadapter.ChangeSelector(position);
                    gvadapter.notifyDataSetChanged();
                    for(LSStructDisplayValue item :sele)
                    {
                        Log.i("debug", "onItemClick: "+item.display);
                    }
                }
            });
    
            final SelectorAdapter lvadapter=new SelectorAdapter(this, mm,sele2 , SelectorAdapter.SingleOrMultiple.multiple);
            lv.setAdapter(lvadapter);
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener()
            {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id)
                {
                    lvadapter.ChangeSelector(position);
                    lvadapter.notifyDataSetChanged();
                    for(LSStructDisplayValue item :sele2)
                    {
                        Log.i("debug", "onItemClick: "+item.display);
                    }
                }
            });
  • 相关阅读:
    BZOJ 3506 机械排序臂 splay
    BZOJ 2843 LCT
    BZOJ 3669 魔法森林
    BZOJ 2049 LCT
    BZOJ 3223 文艺平衡树 splay
    BZOJ 1433 假期的宿舍 二分图匹配
    BZOJ 1051 受欢迎的牛 强连通块
    BZOJ 1503 郁闷的出纳员 treap
    BZOJ 1096 ZJOI2007 仓库设计 斜率优化dp
    BZOJ 1396: 识别子串( 后缀数组 + 线段树 )
  • 原文地址:https://www.cnblogs.com/lsfv/p/9836878.html
Copyright © 2011-2022 走看看