0

我无法让我的数据显示在 ListView 中。我已经删除了所有不必要的代码以保持简单。该程序运行良好,但显示的唯一数据是“Model.Locations @ 421ec04eo” 为什么会发生这种情况?

针点类

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.locations);

        ListView listView1 = (ListView) findViewById(R.id.listView1);

        ArrayList<Locations> items = new ArrayList<Locations>();
        Locations sr1 = new Locations();
        for (int i = 0; i < 15; i++) 
        {
            sr1.setAdress("Blablabla");
            sr1.setTitle("Home");
            sr1.setDistance("200m");
            items.add(sr1);
        }

        ArrayAdapter<Locations> adapter = new ArrayAdapter<Locations>(this,
                android.R.layout.simple_list_item_multiple_choice, items);

        listView1.setAdapter(adapter);
    }
}

Location class

    package Model;


    public class Locations 
    {
    int midlat;
    int midlong;
    String title;
    String adress;
    String distance;

    public int getMidlat() {
        return midlat;
    }


    public String getDistance() {
        return distance;
    }


    public void setDistance(String distance) {
        this.distance = distance;
    }


    public void setMidlat(int i) {
        this.midlat = i;
    }


    public int getMidlong() {
        return midlong;
    }


    public void setMidlong(int midlong) {
        this.midlong = midlong;
    }


    public String getTitle() {
        return title;
    }


    public void setTitle(String title) {
        this.title = title;
    }


    public String getAdress() {
        return adress;
    }


    public void setAdress(String adress) {
        this.adress = adress;
    }


    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
}

locations XML.FILE

<?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"
    android:orientation="vertical" >

    <Button
        android:id="@+id/button1"
        style="?android:attr/buttonBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:text="Button" />

    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/button1"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>

    <TextView
        android:id="@+id/toptext"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:gravity="center_vertical" />

    <TextView
        android:id="@+id/bottomtext"
        android:layout_width="fill_parent"
        android:layout_height="0dip"
        android:layout_weight="1"
        android:ellipsize="marquee"
        android:singleLine="true" />

</RelativeLayout>
4

3 回答 3

3

您需要覆盖toString()您开始执行的自定义类型的方法,但随后只是调用了 super ,这否定了首先覆盖它的目的。

使toString()返回您希望 arrayadapter 在ListViewie中显示的内容

@Override
public String toString(){
  return title + address + distance;
}

当然,这只是一个示例,您可以实现它以满足您的需求。

另外,原因是因为ArrayAdapter<T>默认调用toString()自定义类型的方法来TextView填充ListView. 如果您需要列表在覆盖的 toString 方法中显示的内容之上显示一些特殊的内容,则必须创建一个自定义适配器。

于 2013-01-25T01:02:14.123 回答
1

您正在将一组内存地址传递给适配器,因此这是预期的。

ArrayAdapter<Locations> adapter = new ArrayAdapter<Locations>(this,
                android.R.layout.simple_list_item_multiple_choice, items);

如果您想在视图中显示地址、标题和距离,请考虑自定义列表视图。

于 2013-01-25T00:57:33.523 回答
1

基本的 ArrayAdapter 只使用 Map.Location.toString() 来填充 ListView 的项目视图。使用基本的 ArrayAdapter,默认项目视图是 TextView。为了正确显示您的位置,您可以将 toString() 函数覆盖为您希望它为 Map.Location 实例显示的内容:

@Override
public String toString(){
*"String that you want"*
}

或者另一种方法是创建自定义 BaseAdapter 并覆盖自定义 BaseAdapter 的 getView() 方法以显示专门的 layout.xml。在这里查看说明。

于 2013-01-25T00:57:43.173 回答