实现带图片和文字的打qq效果的listview
时间: 2023-05-12 08:01:16 浏览: 106
要实现带图片和文字的打qq效果的listview,需要在布局文件中定义一个ListView控件,并设置它的适配器。在适配器中,需要自定义一个ListView的Item的布局文件,包含一张图片和一段文字。
首先,在ListView的Item布局文件中添加一个ImageView和一个TextView,用于显示图片和文字,如下:
```
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/icon"
android:layout_width="50dp"
android:layout_height="50dp"/>
<TextView
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"
android:layout_marginLeft="10dp"/>
</LinearLayout>
```
然后,需要创建一个自定义的适配器类,重写父类的getView()方法,在该方法中设置ListView的每个Item的图片和文字,如下:
```
public class MyAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private List<Map<String, Object>> mData;
public MyAdapter(Context context, List<Map<String, Object>> data) {
mInflater = LayoutInflater.from(context);
mData = data;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null) {
holder = new ViewHolder();
convertView = mInflater.inflate(R.layout.item_listview, null);
holder.icon = (ImageView) convertView.findViewById(R.id.icon);
holder.content = (TextView) convertView.findViewById(R.id.content);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.icon.setImageResource((Integer) mData.get(position).get("icon"));
holder.content.setText((String) mData.get(position).get("content"));
return convertView;
}
private class ViewHolder {
ImageView icon;
TextView content;
}
}
```
最后,在Activity中设置ListView的适配器,并传入图片和文字的数据即可。这里使用了一些简单的数据,可以根据需求进行替换。
```
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("icon", R.drawable.icon1);
map1.put("content", "张三");
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("icon", R.drawable.icon2);
map2.put("content", "李四");
data.add(map1);
data.add(map2);
MyAdapter adapter = new MyAdapter(this, data);
ListView listView = (ListView)findViewById(R.id.listview);
listView.setAdapter(adapter);
```