这是我自己写了几个关于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});
};
注:图片和文本的数目要保持一致,否则会出现脚标越界异常