我想在Android应用程序中创建 list View 。
数据存储在外部XML文件中,位于资产文件夹中。
外部XML文件:
<root>
<category> books </category>
<item>
<title> book Title1 </title>
</item>
<item>
<title> book Title2 </title>
</item>
<item>
<title> book Title3</title>
</item>
<category> movies </category>
<item>
<title> Title1 </title>
</item>
<item>
<title> Title2 </title>
</item>
<item>
<title> Title3</title>
</item>
</root>
我想创建一个将包含所有书籍标题的listView
,例如
book Title1
book Title2
book Title3 etc
第一步是使用DOM解析器来解析外部XML文档并使用XPath的所有书籍。(我已经做到了)
第二步是用这些值填充ListView(我没有这样做,因为我不知道哪种是最好的方法)。
我在线阅读了一些示例,在此示例中,数据存储在strings.xml文件中。就我而言,数据是动态的,来自关系数据库,并存储在XML文件中。
我是Android的新手,我希望您对此的建议。
我不知道在哪里存储来自外部XML文件的数据以填充Android中的ListView。
谢谢
一些代码怎么样?下面的代码假定使用片段,但是您应该能够对其进行调整(双关语)以处理任何旧的直接活动:
听起来每个ListView项目您都有两个要显示的属性:
- 类别
- 标题
因此,模型对象看起来像:
public class MyItem {
private String mCategory;
private String mTitle;
public String getCategory() {
return mCategory;
}
// Plus other getters/setters.....
}
如果要显示多个字段,则可以使用自定义布局,将其放入res/layout
(我们称其为list_item_myitems.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/list_item_categoryTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
android:paddingRight="4dp"
android:textStyle="bold" />
<TextView
android:id="@+id/list_item_titleTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="4dp"
android:paddingRight="4dp"/>
</RelativeLayout>
使用片段时,上面的布局将在<FrameLayout>
内部充气。如果您不使用片段,则在您的活动的布局XML中包括上面<ListView>
元素上面的两个<TextView>
项目。
接下来,如何处理每个listView项目显示的视图的自定义适配器类?
public class MyItemAdapter extends ArrayAdapter<MyItem> {
public MyItemAdapter(Activity activity, ArrayList<MyItem> items) {
super(activity, 0, items);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View ret;
if (convertView == null) {
convertView = getActivity().
getLayoutInflater().
inflate(R.layout.list_item_myitems, null);
}
MyItem item = getItem(position);
TextView dateTextView =
(TextView)convertView.findViewById(R.id.list_item_categoryTextView);
dateTextView.setText(item.getCategory());
TextView titleTextView =
(TextView)convertView.findViewById(R.id.list_item_titleTextView);
titleTextView.setText(item.getTitle());
ret = convertView;
return ret;
}
}
在您的列表范围子类(或活动子类 - 可能是ListActivity子类)中,创建上面的自定义适配器(确保传递要显示的项目集合),并致电SetListAdapter(...)。
。玩得开心!
解析您的数据并将其存储到ArrayList
中,然后对您的ListView
使用BaseAdapter
。
您可以为您的listView制作一个适配器,并由对您有意义的数据结构提供支持。唯一的要求是,适配器可以从数据源解释项目,并产生列表视图中一行的视图。我建议您观看ListView的世界
您可以使用简单的列表适配器从XML文件显示您的数据。 public void ongreate(捆绑savedinstancestate){ super.oncreate(savedinstancestate); setContentView(r.layout.main);
setListAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
getResources().getStringArray(R.array.external xml file)));
}