如何使用来自外部文件但不来自res / values / strings.xml文件的数据在Android中填充ListView

时间:2014-01-30 17:01:48

标签: android xml android-listview

我想在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。

感谢

4 个答案:

答案 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)));
}