Android-ListView所包含的item里面的控件点击事件

1、简介

       ListView通过设置适配器,把数据源罗列到界面上展示。当设置事件点击的监听后,就可以获取到ListView的item对象,从而获取到item里面的子控件对象,然后对子控件进行操作。

       过程如下图:


2、ListView的继承关系

       java.lang.Object

              |

              android.view.View

                     |

                    android.view.ViewGroup

                            |

                            android.widget.AdapterView<Textends android.widget.Adapter>

                                   |

                                   android.widget.AbsListView 

  

3、适配器

(1)Adapter

              |

              BaseAdapter

                   |

                   —ArrayAdapter

                  —SimpleAdapter

                  —CursorAdapter

                        |

                       ResourceCursorAdapter

                              |

                             SimpleCursorAdapter

(2)另外自定义的Adapter就是继承某个Adapter然后重新父类的方法

4、示例效果如下:

              

      这里demo主要是自定义了一个Adapter,然后在Adapter里面设置控件的监听事件并且回调到主Activity里面执行。

1、工程目录如下:


2、MainActivity.java的内容如下

<span style="font-size:18px;">package com.yuyang.listviewdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageButton;
import android.widget.ListView;
import com.yuyang.modle.Room;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by suqiongbang on 2016-06-22.
 */
public class MainActivity extends Activity {

    public ListView listView;
    public MyListAdapter myAdapter;
    public List<Room> roomList;
    public ImageButton oldImgBt1,oldImgBt2,oldImgBt3;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.lv);

        initRoom();
        myAdapter = new MyListAdapter(this,this,roomList);
        listView.setAdapter(myAdapter);
    }

    public void initRoom(){
        roomList = new ArrayList<Room>();
        for(int i=0 ; i<10; i++){
            roomList.add(new Room());
        }
    }

    public void clickEvent(int viewId,ImageButton thisBt){
        switch (viewId){
            case R.id.ib1:
                if(oldImgBt1 != null){
                    oldImgBt1.setImageResource(R.drawable.noone);
                }
                thisBt.setImageResource(R.drawable.mark_5);
                oldImgBt1 = thisBt;
                break;
            case R.id.ib2:
                if(oldImgBt2 != null){
                    oldImgBt2.setImageResource(R.drawable.noone);
                }
                thisBt.setImageResource(R.drawable.mark_6);
                oldImgBt2 = thisBt;
                break;
            case R.id.ib3:
                if(oldImgBt3 != null){
                    oldImgBt3.setImageResource(R.drawable.showready);
                }
                thisBt.setImageResource(R.drawable.showcancel);
                oldImgBt3 = thisBt;
                break;
        }
    }
}</span>

3、MyListAdapter.java的内容如下:

<span style="font-size:18px;"><span style="font-size:14px;">package com.yuyang.listviewdemo;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;

import com.yuyang.modle.Room;

import java.util.List;

/**
 * Created by suqiongbang on 2016-06-22.
 */
public class MyListAdapter extends BaseAdapter{

    public Context context;
    public MainActivity callbak;
    public List<Room> roomList;
    public LayoutInflater mInflater;

    public MyListAdapter(Context context,MainActivity callback, List<Room> rooms) {
        this.context = context;
        this.callbak = callback;
        this.roomList = rooms;
    }

    @Override
    public int getCount() {
        return roomList.size();
    }

    @Override
    public Object getItem(int position) {
        return roomList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Room room = new Room();
        mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = null;
        ViewHolder viewHolder = null;
        if(convertView == null){
            viewHolder = new ViewHolder();
            view = mInflater.inflate(R.layout.item,null);
            viewHolder.imgB1 = (ImageButton) view.findViewById(R.id.ib1);
            viewHolder.imgV = (ImageView) view.findViewById(R.id.iv);
            viewHolder.imgB2 = (ImageButton) view.findViewById(R.id.ib2);
            viewHolder.imgB3 = (ImageButton) view.findViewById(R.id.ib3);
            view.setTag(viewHolder);
        }
        else{
            view = convertView;
            viewHolder = (ViewHolder) view.getTag();
        }
        viewHolder.imgB1.setImageResource(R.drawable.noone);
        viewHolder.imgV.setImageResource(R.drawable.table);
        viewHolder.imgB2.setImageResource(R.drawable.noone);
        viewHolder.imgB3.setImageResource(R.drawable.showready);
        viewHolder.imgB1.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                callbak.clickEvent(v.getId(),(ImageButton)v);
            }
        });
        viewHolder.imgB2.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                callbak.clickEvent(v.getId(),(ImageButton)v);
            }
        });
        viewHolder.imgB3.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                callbak.clickEvent(v.getId(),(ImageButton)v);
            }
        });
        return view;
    }

    class ViewHolder{
        public ImageButton imgB1;
        public ImageView imgV;
        public ImageButton imgB2;
        public ImageButton imgB3;
    }
}</span>

4、Room.java的内容如下:

<span style="font-size:18px;">package com.yuyang.modle;

/**
 * Created by suqiongbang on 2016-06-22.
 */
public class Room {
    private String name1;
    private String name2;
    private int mark1;
    private int mark2;

    public String getName1() {
        return name1;
    }

    public String getName2() {
        return name2;
    }

    public int getMark1() {
        return mark1;
    }

    public int getMark2() {
        return mark2;
    }

    public void setMark2(int mark2) {
        this.mark2 = mark2;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

    public void setName2(String name2) {
        this.name2 = name2;
    }

    public void setMark1(int mark1) {
        this.mark1 = mark1;
    }
}</span>

5、布局activity_main.xml
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

    <ListView
        android:id="@+id/lv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>

</RelativeLayout></span>

6、布局item.xml

<span style="font-size:14px;"><?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">

    <ImageButton
        android:id="@+id/ib1"
        android:scaleType="fitCenter"
        android:layout_width="60dp"
        android:layout_height="60dp"
        />
    <ImageView
        android:id="@+id/iv"
        android:layout_toRightOf="@id/ib1"
        android:layout_width="60dp"
        android:layout_height="60dp"
        />
    <ImageButton
        android:id="@+id/ib2"
        android:scaleType="fitCenter"
        android:layout_toRightOf="@id/iv"
        android:layout_width="60dp"
        android:layout_height="60dp"
        />

    <ImageButton
        android:id="@+id/ib3"
        android:scaleType="fitCenter"
        android:layout_alignParentRight="true"
        android:layout_width="100dp"
        android:layout_height="60dp"
        />
</RelativeLayout></span><span style="font-size: 12pt;">
</span>

源码下载:http://download.csdn.net/detail/sq_bang/9556327

记录:ListView的属性及方法详细内容在这个博客:http://www.cnblogs.com/over140/archive/2011/06/07/2074019.html








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值