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);
                    }
                }
            });
  • 相关阅读:
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化和保存
    爬取全部校园新闻
    爬取校园新闻
    Google布隆过滤器
    谷歌json和对象转换
    postgresql和postgis
    json和实体类互相转换
    Linux安装docker-compose
  • 原文地址:https://www.cnblogs.com/lsfv/p/9836878.html
Copyright © 2011-2022 走看看