我无法将数据显示在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>
答案 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以获取相关说明。