Android自定义SimpleAdapter适配器

一.首先创建一个MyAdapter类继承SimpleAdapter
造福伸手党,直接贴代码(我们坚决不做抄袭者,我们只是照搬工),拿走不谢:

package tool;

import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SimpleAdapter;

import java.util.ArrayList;
import java.util.HashMap;

import static com.example.w9.GoodsPlateActivity.selectedItemsByGoods;

public class MyAdapter extends SimpleAdapter {

    //数据List
    private ArrayList> arrayList;
    //上下文
    private Context mContext;

    /**
     * 参数分别为:
     * 上下文context,数据集 data,ListView,from,new int[]{ R.id.itemTitle,R.id.itemText}
     * **/
    public MyAdapter(Context context, ArrayList> data, int resource, String[] from, int[] to){
        super(context, data, resource, from, to);
        // TODO Auto-generated constructor stub
        this.arrayList = data;
        CallActivityNmae = ActivityNmae;
    }

    //配置显示的总item数量
    @Override
    public int getCount() {
        return arrayList.size();
    }
    
    //按照位置获取数据对象
    @Override
    public Object getItem(int position) {
        return arrayList.get(position);
    }
    
    //根据位置获取item的id
    @Override
    public long getItemId(int position) {
        return position ;
    }
    
    //每个item的显示效果
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        View view = super.getView(position, convertView, parent);
        view.setBackgroundColor((Color.parseColor("#F0F8FF")));

        /**
         * 货物列表
         * 根据selectedItemsByGoods中的View position给初始颜色
         * #6495ED:选中颜色
         * #F0F8FF 初始颜色
         * **/
        if(CallActivityNmae.equals("GoodsPlateActivity")){
            if(selectedItemsByGoods!=null && selectedItemsByGoods.size()>0){
                if(selectedItemsByGoods.contains(position)){
                    view.setBackgroundColor((Color.parseColor("#6495ED")));
                }else{
                    view.setBackgroundColor((Color.parseColor("#F0F8FF")));
                }
            }
        }
        
        return view;
    }
}

二.我们自定义一个布局文件goodslist_layout(名字随意),让我们的数据以我们想要的样式展示出来:
例如,我想要这样子展示出来:
在这里插入图片描述
代码:



    

    

        
        
    


注意,这个是一个单独的布局文件,是没有Activity文件的。

三.搬完之后我们接着进入下一步,布局文件代码(带Activity文件的布局文件):



项目代码图:
Android自定义SimpleAdapter适配器_第1张图片
该布局文件的Activity中的代码:


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.HashMap;

import tool.MyAdapter;

public class BlogActivity extends AppCompatActivity {
    private ListView goodsList;                  //ListView

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_blog);

        //绑定ListView列表
        goodsList = (ListView) findViewById(R.id.goodsList);

        //要显示的数据集
        ArrayList> arrayList=new ArrayList>();

        //模拟数据add入数据集
        HashMap map = new HashMap();
        map.put("itemTitle","JAVA");
        map.put("itemText","JAVA好犀利");
        arrayList.add(map);

        HashMap map1 = new HashMap();
        map1.put("itemTitle","C#");
        map1.put("itemText","C#好犀利");
        arrayList.add(map1);

        HashMap map2 = new HashMap();
        map2.put("itemTitle","Python");
        map2.put("itemText","Python好犀利");
        arrayList.add(map2);

        /**
         * 自定义SimpleAdapter
         * BlogActivity.this :该Activity
         * arrayList :数据集
         * R.layout.goodslist_layout :布局文件
         * new String[]{"itemTitle","itemText"} :布局文件中的东西
         * new int[]{ R.id.itemTitle,R.id.itemText} :布局文件的的东西
         * **/
        try{
            MyAdapter myAdapter = new MyAdapter(BlogActivity.this, arrayList, R.layout.goodslist_layout, new String[]{"itemTitle","itemText"}, new int[]{ R.id.itemTitle,R.id.itemText},"GoodsPlateActivity");
            goodsList.setAdapter(myAdapter);
        }catch (Exception e){
            int i = 0;//测试用
        }


        //goodsList的监视器
        ((ListView) findViewById(R.id.goodsList)).setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView parent, View view, int position, long id) {
                /**
                 * position:表示第几个Item
                 * view:点击的第几个Item
                 * **/
                //这里可以定义Item的点击事件
                //ItemClick(position);
                
                parent.getEmptyView();
                
				//点击该行Item改变该行的颜色
				//不难自行理解
                View tag=(View)parent.getTag();
                if (tag != null)
                {
                    if (tag.getId()==id) {
                        return;
                    }else{
                        tag.setBackgroundColor(Color.parseColor("#F0F8FF"));
                    }
                }
                view.setBackgroundColor(Color.parseColor("#6495ED"));
                parent.setTag(view);
            }
        });
    }
}

然后运行项目看效果吧,

下一篇博客会讲选择Item之后,该行Item变颜色(可以选择多个,多行变颜色)

你可能感兴趣的:(Android)