Android开发 常用的ListView与Adapter
2023-09-14 09:14:00 时间
ListView列表效果如下:
1.适配器MyAdapter类代码:
public abstract class MyAdapter<T> extends BaseAdapter {
private LayoutInflater inflater;
private List<T> datas;
private int resId;
public MyAdapter(Context context, List<T> datas, int resId) {
this.inflater = LayoutInflater.from(context);
this.datas = datas;
this.resId = resId;
}
@Override
public int getCount() {
return datas == null ? 0 : datas.size();
}
@Override
public T getItem(int position) {
return datas == null ? null : datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = ViewHolder.getViewHolder(inflater, convertView, parent, resId);
convertView = viewHolder.getConvertView();
convert(viewHolder, getItem(position), convertView, parent, position);
return convertView;
}
public abstract void convert(ViewHolder holder, T item, View convertView, ViewGroup parent, int position);
public List<T> getAdapterDatas() {
return datas;
}
public void addDatas(List<T> items) {
if (datas == null) {
datas = new ArrayList<>();
}
if (items != null) {
datas.addAll(items);
}
}
public void addDatas(int location, List<T> items) {
if (datas == null) {
datas = new ArrayList<>();
}
if (items != null) {
datas.addAll(location, items);
}
}
public void clearDatas() {
if (datas != null) {
datas.clear();
}
}
}
2.ViewHolder.java,设置文本和图片
public class ViewHolder {
private final SparseArray<View> views;
private View convertView;
private ViewHolder(LayoutInflater inflater, ViewGroup parent, int resId) {
this.views = new SparseArray<>();
this.convertView = inflater.inflate(resId, parent, false);
this.convertView.setTag(this);
}
public static ViewHolder getViewHolder(LayoutInflater inflater, View convertView, ViewGroup parent, int resId) {
if (convertView == null) {
return new ViewHolder(inflater, parent, resId);
}
return (ViewHolder) convertView.getTag();
}
@SuppressWarnings("unchecked")
public <T extends View> T getView(int id) {
View view = views.get(id);
if (view == null) {
view = convertView.findViewById(id);
views.put(id, view);
}
return (T) view;
}
public View getConvertView() {
return convertView;
}
public ViewHolder setText(int id, CharSequence text) {
TextView textView = getView(id);
textView.setText(text);
return this;
}
}
3.使用MainActivity.java:
public class MainActivity extends AppCompatActivity {
private ListView contentLv;
private MyAdapter<MyData> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listview);
contentLv = (ListView) findViewById(R.id.lv_content);
init();
}
private void init() {
List<MyData> datas = getDatas();
adapter = new MyAdapter<MyData>(MainActivity.this, datas, R.layout.item) {
@Override
public void convert(ViewHolder holder, MyData item, View convertView, ViewGroup parent, int position) {
holder.setText(R.id.tv1, item.getName1());
holder.setText(R.id.tv2, item.getName2());
}
};
contentLv.setAdapter(adapter);
contentLv.setOnItemClickListener(itemClickListener);
}
private List<MyData> getDatas() {
List<MyData> datas = new ArrayList<>();
for (int i = 1; i < 21; i++) {
MyData data = new MyData("文本:", "文本" + i);
datas.add(data);
}
return datas;
}
private AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {
final MyData data = adapter.getItem(position);
Toast.makeText(MainActivity.this, data.getName2(), Toast.LENGTH_SHORT).show();
}
};
}
4.activity_listview.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/lv_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
5.MyData实体类
public class MyData {
private String name1;
private String name2;
public MyData(String name1, String name2) {
this.name1 = name1;
this.name2 = name2;
}
public String getName1() {
return name1;
}
public void setName1(String name1) {
this.name1 = name1;
}
public String getName2() {
return name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
}
6.item的视图
<?xml version="1.0" encoding="utf-8"?>
<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="12.0dp">
<ImageView
android:id="@+id/iv_icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginRight="5dp"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/tv1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3.0"
android:textSize="16.0sp" />
<TextView
android:id="@+id/tv2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2.0"
android:gravity="center"
android:textSize="16.0sp" />
<ImageView
android:id="@+id/iv_arrow"
android:layout_width="15.0dip"
android:layout_height="15.0dip"
android:paddingLeft="5.0dp"
android:src="@drawable/ic_arrow_right" />
</LinearLayout>
相关文章
- Android开发之Mediaplayer
- Android开发之工程作为库导入
- Android 开发之旅:短信的收发及在android模拟器之间实践(一)
- 《android开发艺术探索》读书笔记(十)--Android的消息机制
- [APP] Android 开发笔记 004-Android常用基本控件使用说明
- 【ANDROID游戏开发之十】(优化处理)详细剖析ANDROID TRACEVIEW效率检视工具,分析程序运行速度!并讲解两种创建SDCARD方式!
- Android网络游戏之神农诀项目开发--视频观看地址
- Android之开发常用颜色
- 《android开发艺术探索》读书笔记(十五)--Android性能优化
- 《android开发艺术探索》读书笔记(十一)--Android的线程和线程池
- Android--快速开发框架 afinal
- Android开发7年,我整理出移动开发架构师进阶知识体系,年薪保底50w
- 鹅厂资深Android开发带你了解面试重点Framework,掌握更加核心的技术
- Android底层到上层的开发流程
- android-framework 开发记录
- android开发分析工具
- Android 开发之避免被第三方使用代理抓包
- 【Android 逆向】Android 逆向方法 ( 静态逆向解析 | 函数调用分析 | 动态运行跟踪 | 运行日志分析 | 文件格式解析 | 敏感信息分析 | 网络信息监控 | 环境伪装模拟 )
- 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
- Android开发之AudioManager(音频管理器)详解
- 实验四 Android项目CriminalIntent应用开发一
- Android开发问题集锦十四--绚丽的烟花