listview中子条目的适配方式

这是我自己写了几个关于listview的小Demo,因为与分不清楚具体使用什么方法,所以进行了对比 ,总结出来以下两种适配的方法,后期还会总结点击事件的方法,希望可以帮助到大家,不总纠结在重要的问题上了。如果大家有更多的方法希望共同交流,我总结了两种方法,一种是自定义适配器,一种是使用SimpleAdapter适配器。

第一种:自定义适配器,以下是一些源码,大家可以用各种控件与listview进行适配,我用的是一个ImageView和一个TextView

1,先创建一个javaBean

class Picture {
	private String title;
	private int imageId;

	public Picture() {
		super();
	}

	public Picture(String title, int imageId) {
		super();
		this.title = title;
		this.imageId = imageId;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public int getImageId() {
		return imageId;
	}

	public void setImageId(int imageId) {
		this.imageId = imageId;
	}
}
2,设置listview的适配器,这里是第一种配置listview子条目的方法

class PictureAdapter extends BaseAdapter {
	private LayoutInflater inflater;
	private List<Picture> pictures;

	public PictureAdapter(String[] titles, int[] images, Context context) {
		super();
		pictures = new ArrayList<Picture>();
		inflater = LayoutInflater.from(context);
		for (int i = 0; i < images.length; i++) {
			//Picture类的构造函数传参
			Picture picture = new Picture(titles[i], images[i]);
			//把图片和文字添加到list集合中
			pictures.add(picture);
		}

	}
//重写BaseAdapter的方法
	@Override
	public int getCount() {
		if (null != pictures) {
			return pictures.size();
		} else {
			return 0;
		}
	}

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

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		ViewHolder viewHolder;
		if (convertView == null) {
			convertView = inflater.inflate(R.layout.gridview_item, null);
			viewHolder = new ViewHolder();
			viewHolder.title = (TextView) convertView.findViewById(R.id.title);
			viewHolder.image = (ImageView) convertView.findViewById(R.id.image);
			convertView.setTag(viewHolder);
		} else {
			viewHolder = (ViewHolder) convertView.getTag();
		}
		viewHolder.title.setText(pictures.get(position).getTitle());
		viewHolder.image.setImageResource(pictures.get(position).getImageId());

		return convertView;
	}

}

class ViewHolder {
	public TextView title;
	public ImageView image;
}

3,设置条目的点击事件,这个点击事件是点击每一个图片跳转到另一个Activity中实现另外的功能,这里也可以帮助大家解决不会多界面跳转的问题

public class HomeActivity extends Activity {
	private GridView gridView;
	private String[] titles = new String[] { "电话", "短信", "存储", "QQ",
			"对话框", "人品计算器", "浏览器", "请求码结果码", "计算器","音乐播放器" };
	private int[] images = new int[] { R.drawable.a, R.drawable.b,
			R.drawable.c, R.drawable.d, R.drawable.e, R.drawable.f,
			R.drawable.g, R.drawable.h, R.drawable.i,R.drawable.j
	};
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_home);

		gridView = (GridView) findViewById(R.id.gridview);
		PictureAdapter adapter = new PictureAdapter(titles, images, this);
		gridView.setAdapter(adapter);

		gridView.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> parent, View v,
					int position, long id) { // Log.i("MainActivity",
				// "Position:" + position);

				switch (position) {
				case 0:
					 Intent intent = new Intent(HomeActivity.this,
							PhoneActivity.class);
					intent.putExtra("id", images[position]);
					startActivity(intent);
					break;
				case 1:
					Intent intent1 = new Intent(HomeActivity.this,
							SmsActivity.class);
					// intent1.putExtra("id", images[position]);
					startActivity(intent1);
					break;
				case 2:
					Intent intent2 = new Intent(HomeActivity.this,
							SdcardActivity.class);

					startActivity(intent2);
					break;
				case 3:
					Intent intent3 = new Intent(HomeActivity.this,
							QqActivity.class);

					startActivity(intent3);
					break;
				case 4:
					Intent intent4 = new Intent(HomeActivity.this,
							DialogActivity.class);

					startActivity(intent4);
					break;
				case 5:
					Intent intent5 = new Intent(HomeActivity.this,
							RpCalcActivity.class);

					startActivity(intent5);
					break;
				case 6:
					Intent intent6 = new Intent(HomeActivity.this,
							WebActivity.class);

					startActivity(intent6);
					break;
				case 7:
					Intent intent7 = new Intent(HomeActivity.this,
							RequestCodeActivity.class);

					startActivity(intent7);
					break;
				case 8:
					Intent intent8 = new Intent(HomeActivity.this,
							ComputerActivity.class);

					startActivity(intent8);
					break;
				case 9:
					Intent intent9 = new Intent(HomeActivity.this,
							MusicActivity.class);

					startActivity(intent9);
					break;

				}

			}

		});
	}
}
第二种:使用SimpleAdapter配置

public class MainActivity extends Activity {

    private ListView myListView;
    private SimpleAdapter listitemAdapter;
String[]items={"通讯录","联系人","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录","通话记录"};
int[] images={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       myListView = (ListView) findViewById(R.id.listview01);
       ArrayList<HashMap<String, Object>> listitem = new ArrayList<HashMap<String,Object>>();
       for(int i=0;i<images.length-1;i++){
           HashMap<String, Object> map = new HashMap<String,Object>();
           map.put("itemText", images[i]);
           map.put("itemTitle", items[i]);
           listitem.add(map);
  listitemAdapter = new SimpleAdapter(this, listitem, R.layout.listview_item, new String[]{"itemTitle","itemText"}, new int[]{R.id.topTextView,R.id.bottomTextView});
      
       };
     
    myListView.setAdapter(listitemAdapter);
       myListView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
        RelativeLayout lr=    (RelativeLayout) arg1;
        TextView mText=(TextView) lr.getChildAt(1);
        Toast.makeText(getApplicationContext(), "你点击了第"+arg2+"项的"+mText.getText().toString(), 0).show();
        }
    });

}

如果所有的子条目都是文字复用的话,就不用创建数组,直接在for循环中设置即可

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       myListView = (ListView) findViewById(R.id.listview01);
       ArrayList<HashMap<String, Object>> listitem = new ArrayList<HashMap<String,Object>>();
       for(int i=0;i<images.length-1;i++){
    	   HashMap<String, Object> map = new HashMap<String,Object>();
    	   map.put("itemText", "item"+i);
    	   map.put("itemTitle", "条目"+i);
    	   listitem.add(map);                                                    //从一个联系条目的被添加名字值map集合的list集合   //到设置到布局控件上的id集合
 listitemAdapter = new SimpleAdapter(this, listitem, R.layout.listview_item, new String[]{"itemTitle","itemText"}, new int[]{R.id.topTextView,R.id.bottomTextView});
      
       };

注:图片和文本的数目要保持一致,否则会出现脚标越界异常



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值