如何在Android中使用来自外部文件而不是来自res/values/strings.xml文件的数据填充列表视图



我想在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)));
}

相关内容

最新更新