0

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

3 に答える 3

3

カスタムタイプのメソッドをオーバーライドする必要がありますtoString()。これは、最初にオーバーライドする目的を無効にするスーパーと呼ばれます。

arrayadapterがietoString()に表示したいものを返しますListView

@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 に答える