- UID
- 675715
- 积分
- 0
- 金币
- 0
- 精华
- 0
- 威望
- 0
- 贡献
- 0
- 阅读权限
- 220
- 注册时间
- 2010-10-4
- 最后登录
- 2026-5-6
- 在线时间
- 0 小时
热心网友
- 金币
- 0
- 阅读权限
- 220
- 精华
- 0
- 威望
- 0
- 贡献
- 0
- 在线时间
- 0 小时
- 注册时间
- 2010-10-4
|
简介
- 提供自定义 Adapter 的基本实现,是其他自定义 Adapter 的基类
具体作用
参数、方法解析
-
BaseAdapter(Context context, List<T> data):构造方法;BaseAdapter是一个抽象类,它必须自定义一个子类才可以实例化
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends BaseAdapter {
private Context context;
private List<String> data;
// 构造方法
public MyAdapter(Context context, List<String> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size(); // 返回数据项的数量
}
@Override
public Object getItem(int position) {
return data.get(position); // 返回指定位置的数据项
}
@Override
public long getItemId(int position) {
return position; // 返回数据项的 ID,通常用位置作为 ID
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// 如果 convertView 为空,则需要创建新的视图
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
}
// 查找视图中的 TextView
TextView textView = convertView.findViewById(R.id.textView);
// 设置 TextView 的文本为数据项
textView.setText((String) getItem(position));
return convertView; // 返回视图
}
}
//'Arrays.asList'用于将一组对象转化为一个 List。这个方法返回一个固定大小的 List,即列表的大小不能被改变,但你可以对其进行读写操作
List<String> data = Arrays.asList("Item 1", "Item 2", "Item 3");
//实例化
MyAdapter adapter = new MyAdapter(this, data);
- 参数解析:
- context:用于访问应用的资源、布局和其他应用环境相关的信息。在构造方法中传入,用于在适配器类中使用,如在 LayoutInflater 中创建视图时需要上下文对象
- data:数据源,包含需要在列表中显示的数据项。在构造方法中传入,用于在适配器类中获取和绑定数据
-
adapter.getCount():返回数据源中项目的总数
-
adapter.getItem(int position):获取指定位置的数据项
int mItem = adapter.getItem(0);
- 参数解析:
- position:要获取的项的位置(从 0 开始的索引)
-
adapter.getItemId(int position):获取指定位置数据项的 ID
int mItem = adapter.getItemId(0); // 通常返回位置本身作为 ID
- 参数解析:
- position:要获取项 ID 的位置(从 0 开始的索引)
-
adapter.getView(int position, View convertView, ViewGroup parent):创建并返回一个表示数据项的视图
ListView listView = view.findViewById(android.R.id.listView_1);
View view = adapter.getView(0, null, listView);
- 参数解析:
- position:要显示的数据项的位置(从 0 开始的索引)
- convertView:可重用的视图,如果该视图不为空,则可以重用以提高性能(通常是上次使用的视图)
- parent:ListView 或 GridView 的父视图,用于生成新的视图
-
adapter.notifyDataSetChanged():通知适配器数据已发生更改,要求视图更新
使用环境解析
ListView
-
用途:显示滚动的列表项,例如消息列表、联系人列表等
-
BaseAdapter适用性:适合用来创建自定义列表项视图,将数据源与 ListView 绑定。例如,展示自定义布局的联系人信息或产品列表
-
示例:如果你需要显示一个包含图片和文字的复杂列表项,你可以使用 BaseAdapter 自定义适配器来实现
GridView
Spinner
AutoCompleteTextView
-
用途:提供自动完成的文本输入框,例如搜索建议或输入提示
-
BaseAdapter 适用性:自定义自动完成项的显示方式和数据源。例如,显示带有图片和文字的搜索建议
-
示例:如果你需要在 AutoCompleteTextView 中显示复杂的数据项或自定义视图,可以使用 BaseAdapter
总结
- BaseAdapter 是用于创建自定义适配器的基类,适用于多种 AdapterView,如 ListView、GridView、Spinner 和 AutoCompleteTextView。通过继承 BaseAdapter 并实现其方法,你可以控制如何将数据项绑定到视图中,从而实现灵活的数据展示和用户界面自定义。
完整代码示例
-
创建启动类布局文件res/layout/activity_main.xml,包含一个 ListView 控件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:dividerHeight="1dp"
android:divider="@android:color/darker_gray"/>
</RelativeLayout>
-
创建布局文件res/layout/list_item.xml,包含一个 TextView控件
<?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="vertical"
android:padding="16dp">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"/>
</LinearLayout>
-
创建一个继承自 BaseAdapter 的自定义适配器类:MyAdapter.java
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import java.util.List;
public class MyAdapter extends BaseAdapter {
private Context context;
private List<String> data;
// 构造方法
public MyAdapter(Context context, List<String> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.size(); // 返回数据项的数量
}
@Override
public Object getItem(int position) {
return data.get(position); // 返回指定位置的数据项
}
@Override
public long getItemId(int position) {
return position; // 返回数据项的 ID,通常用位置作为 ID
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
// 如果 convertView 为空,则需要创建新的视图
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
}
// 查找视图中的 TextView
TextView textView = convertView.findViewById(R.id.textView);
// 设置 TextView 的文本为数据项
textView.setText((String) getItem(position));
return convertView; // 返回视图
}
}
-
在启动类中使用自定义适配器MainActivity.java,在 MainActivity 中实例化自定义适配器,并将其设置到 ListView 中
import android.os.Bundle;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化数据
List<String> data = Arrays.asList("Item 1", "Item 2", "Item 3");
// 创建自定义适配器MyAdapter
MyAdapter adapter = new MyAdapter(this, data);
// 获取 ListView 并设置适配器
ListView listView = findViewById(R.id.listView);
listView.setAdapter(adapter);
}
}
-
运行该应用将看到一个 ListView,其中每个列表项显示初始化数据中的字符串。该应用使用 BaseAdapter 来自定义适配器,并将其绑定到 ListView 中以显示数据。这个示例展示了如何创建和使用 BaseAdapter,并在实际开发中可以根据需要进行扩展和定制
来源:https://www.cnblogs.com/ajunjava/p/18336590 |
|