android自定义listview

贴出关键代码,仅供参考

第一个主类:

package com.example.listview01;


import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;

/**
* @ClassName: MainActivity
* @Description: TODO(...)
* @author  lizhe
* @date 2014年7月10日 下午11:41:40
*
*/
public class MainActivity extends Activity {

    private SimpleAdapter adapter;// 声明适配器对象
    private ListView listView; // 声明列表视图对象
    private List<Map<String, Object>> list;// 声明列表容器
    public static MainActivity ma;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ma = this;
        // 实例化列表容器
        list = new ArrayList<Map<String, Object>>();
        listView = new ListView(this);// 实例化列表视图
        // 实例一个列表数据容器
        Map<String, Object> map = new HashMap<String, Object>();
        // 往列表容器中添加数据
        map.put("item1_imageivew", R.drawable.ic_launcher);
        map.put("item1_bigtv", "BIGTV");
        map.put("item1_smalltv", "SMALLTV");
        // 将列表数据添加到列表容器中
        list.add(map);
        // --使用系统适配器,无法实现组件监听;
        //实例适配器
        //使用Android 提供的SimpleAdapter适配器
        adapter = new SimpleAdapter(this, list, R.layout.activity_main,
                new String[] {"item1_imageivew", "item1_bigtv", "item1_smalltv" },
                new int[] {R.id.iv, R.id.bigtv, R.id.smalltv });
        
        // --使用自定义适配器,方便监听其ListView中每一项的事件监听
         MySimpleAdapter adapter = new MySimpleAdapter(this, list,
         R.layout.activity_main, new String[] {
         "item1_imageivew", "item1_bigtv", "item1_smalltv" }, new int[] {
         R.id.iv, R.id.bigtv, R.id.smalltv });
        // 为列表视图设置适配器(将数据映射到列表视图中)
        listView.setAdapter(adapter);
        // //显示列表视图
        this.setContentView(listView);
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

适配器

/**
 *
 */
package com.example.listview01;

import java.util.List;
import java.util.Map;

import android.app.AlertDialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.CompoundButton.OnCheckedChangeListener;

/**
 * @author  lizhe
 *
 */
public class MySimpleAdapter extends BaseAdapter {
    private LayoutInflater mInflater;
    private List<Map<String, Object>> list;
    private int layoutID;
    private String flag[];
    private int ItemIDs[];
    public MySimpleAdapter(Context context, List<Map<String, Object>> list,
            int layoutID, String flag[], int ItemIDs[]) {
        this.mInflater = LayoutInflater.from(context);
        this.list = list;
        this.layoutID = layoutID;
        this.flag = flag;
        this.ItemIDs = ItemIDs;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return list.size();
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        convertView = mInflater.inflate(layoutID, null);
        convertView = mInflater.inflate(layoutID, null);
        for (int i = 0; i < flag.length; i++) {//备注1
            if (convertView.findViewById(ItemIDs[i]) instanceof ImageView) {
                ImageView iv = (ImageView) convertView.findViewById(ItemIDs[i]);
                iv.setBackgroundResource((Integer) list.get(position).get(
                        flag[i]));
            } else if (convertView.findViewById(ItemIDs[i]) instanceof TextView) {
                TextView tv = (TextView) convertView.findViewById(ItemIDs[i]);
                tv.setText((String) list.get(position).get(flag[i]));
            }else{
                //...备注2
            }
        }
        addListener(convertView);
        return convertView;
    }
/**
 *
 * 备注3
 */
    public void addListener(View convertView) {
        ((Button)convertView.findViewById(R.id.btn)).setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        new AlertDialog.Builder(MainActivity.ma)
                        .setTitle("自定义通用SimpleAdapter")
                        .setMessage("按钮成功触发监听事件!")
                        .show();
                    }
                });
        ((CheckBox)convertView.findViewById(R.id.cb)).
        setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                new AlertDialog.Builder(MainActivity.ma)
                .setTitle("自定义通用SimpleAdapter")
                .setMessage("CheckBox成功触发状态改变监听事件!")
                .show();
            }
        });
    }
}

效果图:

235855_osUA_187822.png

235855_Hf1U_187822.png

235932_Xlyx_187822.png

转载于:https://my.oschina.net/leejayblog/blog/289578

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值