大家做安卓开发的时候listview是经常使用到的东西(虽然现在有了recyclerview),在这里我把自己懂得一点东西分享出来,大神手下留情。
listview点击某一项做操作的时候大家都知道,listview有自己的item监听事件但是如果是点击item的某一个子控件呢?
估计很多新手都会这么写

holder.tv_tz.setOnClickListener(new OnClickListener() {
@Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            Intent intent=new Intent(context,MainActivity2.class);
            context.startActivity(intent);

        }

这样真好吗- -。。如果有大量的逻辑判断都写在这里的话,首先代码不整洁 条理不清晰就算了!它还丑!没错 我们多复制几遍看下效果

holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
        holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
        holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
        holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
        holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
        holder.tv_tz.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent(context,MainActivity2.class);
                context.startActivity(intent);

            }
        });
是不是有种淡淡的忧伤。。内存优化的问题咱们就不多说了(我也说不明白) 刚开始我就是这样写的后来被老大训了一顿,说我这都是啥!啥!啥。。。
    于是我又改了一种方法运用到了handle。
    首先适配器构造方法
public TestAdapter(Context context,List<Integer>integers,Handler handler) {
        // TODO Auto-generated constructor stub
        if(integers!=null){
        this.integers=integers;
        }else{
            this.integers=new ArrayList<Integer>();
        }
        this.lif=LayoutInflater.from(context);
        this.context=context;
        this.handler=handler;
    }```
    然后重写点击事件onClickListener
//重写的点击监听 
 private class OnItemClickListener implements OnClickListener{ 
 //点击的某个控件 
 private int indexClick=0; 
 //点击的某一项 
 private int position=0; 
 public OnItemClickListener(int indexClick,int position) { 
 // TODO Auto-generated constructor stub 
 this.indexClick=indexClick; 
 this.position=position; 
 }
@Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        Message message=new Message();
        message.what=indexClick;
        message.obj=integers.get(position);
        //发送handle
        handler.sendMessage(message);

    }
然后就是子控件的监听事件
//跳转的监听事件
    holder.tv_tz.setOnClickListener(new OnItemClickListener(CLICK_ITEM_TZ, position));
    //删除某一项的监听事件
    holder.tv_delete.setOnClickListener(new OnItemClickListener(CLICK_ITEM_DELETE, position));
    这样代码就一目了然了,把逻辑放到主页面去做
public class MainActivity extends Activity {
    private List<Integer> integers;
    private TestAdapter testAdapter;
    private ListView lv;
    //图片的数组
    private int[] tupians = new int[] { R.drawable.tupian1, R.drawable.tupian2,
            R.drawable.tupian3, R.drawable.tupian4, R.drawable.tupian5,
            R.drawable.tupian6, R.drawable.tupian7, R.drawable.tupian8, };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv_main);
        integers=new ArrayList<Integer>();
        for(int i=0;i<tupians.length;i++){
            integers.add(tupians[i]);
        }
        //适配数据
        testAdapter=new TestAdapter(this, integers, handler);
        lv.setAdapter(testAdapter);
    }
    //创建接收数据的handle 
    private Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            Integer integer=(Integer) msg.obj;
            switch (msg.what) {

            //跳转
            case TestAdapter.CLICK_ITEM_TZ:
                Intent intent=new Intent(MainActivity.this,MainActivity2.class);
                //传递图片的id到下一个页面
                intent.putExtra("integer", integer);
                startActivity(intent);
                break;
            //删除
            case TestAdapter.CLICK_ITEM_DELETE:
                //移除点击的某一项数据
                integers.remove(integer);
                //重新适配
                testAdapter=new TestAdapter(MainActivity.this, integers, handler);
                lv.setAdapter(testAdapter);
                break;

            default:
                break;
            }
        }
    };

}
MainActivity2显示上个页面传递过来的图片id并加载
public class MainActivity2 extends Activity {
    private ImageView imageView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);
        imageView=(ImageView) findViewById(R.id.im_main2);
        Intent intent=getIntent();
        int id=intent.getIntExtra("integer", 0);
        imageView.setImageResource(id);
        imageView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                finish();
            }
        });

    }
![效果图]()

listview有时候会根据需求会让他选中的时候改变背景颜色,我们可以在适配器给出一个识别的标志 判断是否是他的时候改变选中的item的背景颜色

首先适配器设置一个标识

//选中的某一项 默认为第一项
    public static int select=0;

根据不同的标识设置不同的背景色

if(select==position){
            //选中时背景色为红色
            holder.rl_bg.setBackgroundColor(Color.parseColor("#ff3333"));
        }else{
            //否则白色
            holder.rl_bg.setBackgroundColor(Color.parseColor("#ffffff"));
        }

在activity设置listview的点击事件,让标识等于当前点击的position并刷新适配器

lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int positon,
                    long arg3) {
                // TODO Auto-generated method stub
                //让选中的标识等于点击position 并刷新适配器
                TestAdapter.select=positon;
                testAdapter.notifyDataSetChanged();

            }
        });

show processlist后如何删除id 删除listview某一项_ide