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

标签 android xml android-listview

我想在 Android 应用程序中创建一个 ListView

数据存储在 Assets 文件夹中的外部 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。

谢谢

最佳答案

一些代码怎么样?下面的代码假设使用 Fragments,但您应该能够对其进行调整(双关语)以与任何旧的直接 Activity 一起使用:

听起来每个 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> 内膨胀使用 fragment 时。如果您不使用 fragment ,请包含两个 <TextView>上面的项目低于您的 <ListView> Activity 布局 XML 中的元素。

接下来,如何使用自定义适配器类来处理呈现为每个 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(...)。

玩得开心!

关于android - 如何使用来自外部文件而不是来自 res/values/strings.xml 文件的数据填充 Android 中的 ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21462794/

相关文章:

xml - 尝试获取XML元素

android - 如何实现Android Pull-to-Refresh

java - 我们可以使用 SharedPreference 将数据从一个 Activity 共享或传输到另一个 Activity 吗?

java - 斑马打印机出现意外线条

java - 从选项卡获取 fragment 中适配器的位置

java - Docx4J 从 docx 文件中获取页眉/页脚元素并修改它们

java - 使用VTD-XML和Java修改巨大的xml文件中xPath表达式找到的所有值

android - Android Keystore KMS对称加解密如何管理?

android - 如何使用 Cursor Adapter 刷新 listView

java - 如何创建json模型类?