我是Android编程的初学者,在完成此简单任务时遇到了很大麻烦。

我有一个ArrayList:

ArrayList<HashMap<String, String>> tableList = new ArrayList<HashMap<String, String>>();


我想将每个键/值对添加到ListView。

如何将它们添加到ListView?我已经看到了无数关于在线使用适配器的解释,但是它们都使用了我一无所知的变量。

最佳答案

构建自己的适配器类:

public class MyAdapter extends BaseAdapter {

    private Activity activity;
    private HashMap<String, String> map;

    public MyAdapter(Activity activity, HashMap<String, String> map) {
        this.activity = activity;
        this.map = map;
    }

    public int getCount() {
        return map.size();
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) activity
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.my_list_item,
                    null);
        }

            // Recommended to use a list as the dataset passed in the constructor.
            // Otherwise not sure how you going to map a position to an index in the dataset.
            String key = // get a key from the HashMap above
            String value = map.get(key);

            TextView keyView = convertView.findViewById(R.id.item_key);
            keyView.setText(key);

            TextView valueView = convertView.findViewById(R.id.item_value);
            valueView .setText(value);

        return convertView;
    }
}


然后,将其传递到ListView setAdapter方法:

MyAdapter myAdapter = new MyAdapter(this, map);
ListView listview = (ListView) findViewById(R.id.listview);
listview.setAdapter(myAdapter);


示例布局/my_list_item.xml:

<LinearLayout xmlns:android:http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
>

    <TextView
        android:id="@+id/item_key"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />

    <TextView
        android:id="@+id/item_value"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
    />
</LinearLayout>

10-07 23:14