📅  最后修改于: 2023-12-03 15:29:22.802000             🧑  作者: Mango
SimpleAdapter是Android系统自带的一个适配器,可用于将数据绑定到ListView、GridView等控件上。但是,SimpleAdapter存在一些缺陷,例如无法自定义数据的展示方式、无法添加多种类型的Item等。为了解决这些问题,我们可以自定义SimpleAdapter,并在其中实现自定义的数据展示方式。
以下是自定义SimpleAdapter的详细步骤:
自定义SimpleAdapter需要定义一个布局文件来描述每一个Item的布局样式,在布局文件中我们可以添加多个控件,用于展示不同的数据。
自定义SimpleAdapter需要继承SimpleAdapter类,并实现其中的getView方法。
在重写getView方法中,我们需要完成以下几个步骤:
下面是一个自定义SimpleAdapter的示例代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold"/>
<TextView
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"/>
<TextView
android:id="@+id/gender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"/>
<TextView
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="16sp"/>
</LinearLayout>
public class MySimpleAdapter extends SimpleAdapter {
private Context mContext;
public MySimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to) {
super(context, data, resource, from, to);
mContext = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
LayoutInflater inflater = LayoutInflater.from(mContext);
view = inflater.inflate(R.layout.item, parent, false);
}
TextView name = view.findViewById(R.id.name);
TextView age = view.findViewById(R.id.age);
TextView gender = view.findViewById(R.id.gender);
TextView email = view.findViewById(R.id.email);
Map<String, Object> item = (Map<String, Object>) getItem(position);
name.setText(item.get("name").toString());
age.setText(item.get("age").toString());
gender.setText(item.get("gender").toString());
email.setText(item.get("email").toString());
return view;
}
}
public class MainActivity extends AppCompatActivity {
private ListView mListView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.list_view);
List<Map<String, Object>> data = new ArrayList<>();
for (int i = 0; i < 20; i++) {
Map<String, Object> item = new HashMap<>();
item.put("name", "张三" + i);
item.put("age", i + "");
item.put("gender", "男");
item.put("email", "zhangsan" + i + "@qq.com");
data.add(item);
}
MySimpleAdapter adapter = new MySimpleAdapter(this, data, R.layout.item, new String[]{"name", "age", "gender", "email"}, new int[]{R.id.name, R.id.age, R.id.gender, R.id.email});
mListView.setAdapter(adapter);
}
}
以上是一个使用自定义SimpleAdapter的示例代码,运行后可查看展示结果。