我尝试使用SimpleAdapter来填充ListView但只是失败了。
我已经阅读了很多案例,但仍然找不到有用的方法。
这是守则。我想知道是什么问题。
ArrayList<HashMap<String,Object>> listdata=new ArrayList<HashMap<String,Object>>();
for (int i=0;i<3;i++){
HashMap<String, Object> hm = new HashMap<String, Object>();
hm.put("title", "title");
hm.put("context", "context");
listdata.add(hm);
}
String[] from = {"title", "context"};
int[] to={R.id.title,R.id.context};
SimpleAdapter adapter = new SimpleAdapter(this, listdata, R.layout.list_item, from, to);
ListView lv=(ListView)this.findViewById(R.id.listView1);
lv.setAdapter(adapter);
// list_item的代码
<LinearLayout
<ListView android:layout_height="wrap_content" android:id="@+id/listV1" android:layout_width="match_parent">
<LinearLayout>
<TextView android:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
<TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
</ListView>
如果有人能提供帮助我真的很感激!
答案 0 :(得分:3)
我怀疑你的Xml存在问题,请尝试为列表项声明第二个布局文件。 e.g。
your_activity.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView android:layout_height="wrap_content" android:id="@+id/listView1" android:layout_width="fill_parent" />
</LinearLayout>
和list_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_height="wrap_content" android:id="@+id/title" android:text="TextView" android:layout_width="wrap_content" android:textAppearance="?android:attr/textAppearanceLarge"></TextView>
<TextView android:text="TextView" android:id="@+id/context" android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
</LinearLayout>
如果使用上述两个布局文件,您的代码看起来不错,应该可以正常工作。
答案 1 :(得分:1)
我总是把我的列表项放在一个单独的xml文件中。也许尝试将带有两个TextView的LinearLayout放在一个文件中(也可以称之为listrow.xml)。
举个例子:
这是listitem(list_stat_item.xml):
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android">
<TextView android:text="" android:id="@+id/txtKey"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:padding="10dp" android:textSize="16sp"></TextView>
<TextView android:text="" android:id="@+id/txtValue"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:padding="10dp" android:textSize="16sp"></TextView>
</LinearLayout>
这是主视图(view_stats.xml):
<LinearLayout android:id="@+id/LinearLayout01"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">
<ListView android:id="@android:id/list" android:layout_width="fill_parent"
android:layout_height="0dip" android:layout_weight="1"
android:transcriptMode="normal" android:divider="@drawable/list_divider"
android:dividerHeight="1px" />
</LinearLayout>
以下是代码:
创建一个ArrayList,并向其添加项目,然后绑定到自定义适配器。
ArrayList<StatItem> lst = new ArrayList<StatItem>();
lst.add(new StatItem("Current Week: ", String.valueOf(currentWeek)));
lst.add(new StatItem("Weeks Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID) / 7)));
lst.add(new StatItem("Days Left: ", String.valueOf(GeneralUtils.daysUntilBirth(this, pregnancyID))));
lst.add(new StatItem("Current Trimester: ", String.valueOf(currentTrimester)));
lst.add(new StatItem("Posts: ", String.valueOf(blogCount)));
lst.add(new StatItem("Baby Names: ", String.valueOf(babyNamesCount)));
getListView().setSelector(android.R.color.transparent);
StatListAdapter sa = new StatListAdapter(this, R.layout.list_stat_item, lst );
setListAdapter(sa);
如果要查看适配器代码(StatListAdapter extends ArrayAdapter):
public class StatListAdapter extends ArrayAdapter<StatItem>
{
public ArrayList<StatItem> items;
public StatListAdapter(Context context, int textViewResourceId, ArrayList<StatItem> objects) {
super(context, textViewResourceId, objects);
this.items = objects;
}
public View getView(int position, View convertView, ViewGroup parent)
{
View v = convertView;
if (v == null)
{
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.list_stat_item, null);
}
StatItem i = items.get(position);
if (i != null)
{
TextView kt = (TextView)v.findViewById(R.id.txtKey);
TextView vt = (TextView)v.findViewById(R.id.txtValue);
kt.setText(i.key);
vt.setText(i.value);
}
return v;
}
}