2014-01-30 39 views
2

我想在android應用程序中創建一個列表視圖如何在Android中使用來自外部文件而不是res/values/strings.xml文件的數據填充ListView

數據存儲在位於資產文件夾中的外部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 

第一步是爲了解析外部XML文檔,並把所有的書名使用XPath使用DOM解析器。 (我已經做到了)

第二步是那些價值(我沒有這樣做,因爲我不知道這是做的最好的方法)填補的ListView。

我在線閱讀了一些例子,在這個例子中數據存儲在strings.xml文件中。 在我的情況下,數據是動態的,來自關係數據庫並存儲在xml文件中。

我是新來的android,我希望你的建議。

我不知道在哪裏存儲來自外部xml文件的數據,以便在Android中填充ListView。

感謝

回答

1

一些代碼如何?下面的代碼假設使用片段,但是您應該能夠適應它(雙關語意圖)與任何舊的直接活動一起使用活動:

聽起來像每個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項目顯示的視圖的自定義適配器類?

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子類(或活動的子類 - 可能是一個ListActivity子類),創建上面(確保傳遞要顯示項目的集合)並調用setListAdapter(...)的自定義適配器。

玩得開心!

1

您可以爲您的ListView創建一個適配器,該適配器由任何對您有意義的數據結構支持。唯一的要求是適配器可以解釋數據源中的項目,並生成一個視圖,該視圖成爲ListView中的一行。我建議你看The World of ListView

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))); 
} 
+2

只有代碼答案通常可以從一些解釋性文本中隨代碼一起獲益。 –

+0

感謝您的糾正,下次會記住這一點,這裏只是新的。 – anzala

相關問題