Android:无法获取要在ListView中显示的数据

时间:2013-01-25 00:46:26

标签: java android listview

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

PinPoint类

    @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>

3 个答案:

答案 0 :(得分:3)

您需要覆盖您开始执行的自定义类型的toString()方法,但之后只需调用super,否则将首先取消覆盖它的目的。

toString()返回你希望arrayadapter在ListView中显示的内容,即

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

当然,这只是一个例子,您可以根据自己的需要实施它。

另外,原因是默认情况下ArrayAdapter<T>会调用自定义类型的toString()方法来填充TextView当前行中的ListView。如果你需要列表显示一些特殊的东西,你可以在覆盖的toString方法中放在一起,你将不得不创建一个自定义适配器。

答案 1 :(得分:1)

您正在将一组内存地址传递给适配器,因此需要它。

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

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

答案 2 :(得分:1)

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

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

或者另一种方法是创建自定义BaseAdapter并覆盖自定义BaseAdapter的getView()方法以显示specialize layout.xml。请查看here以获取相关说明。