我想在Android应用程序中创建列表视图。
数据存储在资源文件夹中的外部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
e.g。
book Title1
book Title2
book Title3 etc
第一步是使用DOM解析器来解析外部xml文档并使用xpath获取所有书籍的标题。(我已经完成了)
第二步是用List 填充ListView(我没有这样做,因为我不知道哪种方法最好)。
我在网上阅读了一些例子,在这个例子中,数据存储在strings.xml文件中。 在我的例子中,数据是动态的,来自关系数据库,存储在xml文件中。
我是android的新手,我希望你的建议。
我不知道在哪里存储来自外部xml文件的数据,以便在Android中填充ListView。
感谢
答案 0 :(得分:1)
解析您的数据并将其存储到ArrayList
,然后使用BaseAdapter
作为ListView
。
答案 1 :(得分:1)
您可以为ListView创建一个适配器,该适配器由对您有意义的任何数据结构提供支持。唯一的要求是适配器可以解释数据源中的项目并生成一个View成为ListView中的行。我建议你看The World of ListView
答案 2 :(得分:1)
一些代码怎么样?下面的代码假定使用Fragments,但你应该能够调整它(双关语)以适应任何旧的直接活动:
听起来每个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中的<TextView>
元素下方添加两个<ListView>
项。
接下来,自定义适配器类如何处理呈现为每个ListView项显示的View?
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;
}
}
在ListFragment子类(或Activity子类 - 可能是ListActivity子类)中,创建上面的自定义适配器(确保传递要显示的项集合)并调用setListAdapter(...)。
玩得开心!
答案 3 :(得分:0)
您可以使用简单的列表适配器来显示xml文件中的数据。 public void onCreate(Bundle 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)));
}