📜  Android中的自定义SimpleAdapter与示例(1)

📅  最后修改于: 2023-12-03 15:29:22.802000             🧑  作者: Mango

Android中的自定义SimpleAdapter与示例

简介

SimpleAdapter是Android系统自带的一个适配器,可用于将数据绑定到ListView、GridView等控件上。但是,SimpleAdapter存在一些缺陷,例如无法自定义数据的展示方式、无法添加多种类型的Item等。为了解决这些问题,我们可以自定义SimpleAdapter,并在其中实现自定义的数据展示方式。

自定义SimpleAdapter的步骤

以下是自定义SimpleAdapter的详细步骤:

  1. 定义布局文件

自定义SimpleAdapter需要定义一个布局文件来描述每一个Item的布局样式,在布局文件中我们可以添加多个控件,用于展示不同的数据。

  1. 继承SimpleAdapter

自定义SimpleAdapter需要继承SimpleAdapter类,并实现其中的getView方法。

  1. 重写getView方法

在重写getView方法中,我们需要完成以下几个步骤:

  • 根据布局文件获取View。
  • 通过getItem方法获取当前项的数据。
  • 将数据绑定到控件上。
示例代码

下面是一个自定义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>
自定义SimpleAdapter类
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的示例代码,运行后可查看展示结果。