如何摆脱SimpleAdapter

时间:2014-02-12 00:46:09

标签: android android-listview android-arrayadapter

我有一个包含三个项目的列表视图。 color_idcolor_namecolor_count

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView android:id="@+id/color_id"/>

    <TextView android:id="@+id/color_name"/>

    <TextView android:id="@+id/color_count"/>
</LinearLayout>

我将数据从服务器加载到我的列表中。在这里,我手动将数据添加到列表中以进行演示:

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

HashMap<String, String> map = new HashMap();
map.put("id", "1");
map.put("color_name", "red");
map.put("color_count", "10");
colorsList.add(map);
map = new HashMap();
map.put("id", "2");
map.put("color_name","yellow"):
map.put("color_count","15");
colorsList.add(map);

ListAdapter adapter = new SimpleAdapter(
        MyActivity.this, colorsList,
        R.layout.list_item_colors, new String[] {"id",
        "color_name","color_count"}, new int[] {
        R.id.color_id, R.id.color_name, R.id.color_count});

setListAdapter(adapter);

问题

这一切对我来说都很好。但是,出于其他原因,我希望与SimpleAdapter分道扬and,而是使用ArrayAdapter但是,使用ArrayAdapter 我不确定如何设置我拥有的三个项目:color_idcolor_namecolor_count

2 个答案:

答案 0 :(得分:0)

您需要创建自定义ArrayAdapterovveride getView()方法,此方法每次在列表视图中创建项目时都会调用此方法,您将在其中扩充您的布局(包含textviews)并附加其数据

有关于ListView和自定义

的好教程

http://www.vogella.com/tutorials/AndroidListView/article.html

并随时为我提供任何不明显的东西

答案 1 :(得分:0)

你可以使用SimpleAdapter。这是我的演示。 MainActivity.java:

public class MainActivity extends Activity{
private ArrayList<HashMap<String, String>> colorsList;
private ListView list;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    list=(ListView)findViewById(R.id.listcolor);

    colorsList = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("id", "1");
    map.put("color_name", "red");
    map.put("color_count", "10");
    colorsList.add(map);
    map = new HashMap<String, String>();
    map.put("id", "2");
    map.put("color_name","yellow");
    map.put("color_count","15");
    colorsList.add(map);
    SimpleAdapter adapter=new SimpleAdapter(this,colorsList,R.layout.list_item_colors,
            new String[] {"id","color_name","color_count"},
            new int[] {R.id.color_id, R.id.color_name, R.id.color_count});
    list.setAdapter(adapter);
}

}

XMl: activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ListView 
    android:id="@+id/listcolor"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

list_item_colors.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

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

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

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