0

我已經爲自己構建了一個應用程序,其中包含一個列表。到目前爲止,我已經使用SimpleAdapter來填充列表,但我決定移動到ArrayAdapter。問題是,我不知道如何以相同的方式填充ArrayAdapter!下面是我使用的方法我SimpleAdapter從simpleAdapter轉換爲ArrayAdapter

adapter=new SimpleAdapter(this, listItems, R.layout.custom_row_view, new String[]{"name", "current", "reset"}, new int[] {R.id.text1, R.id.text2, R.id.text3}); 

我listItems中的變量實際上是設置這樣的:

static final ArrayList<HashMap<String,String>> listItems = new ArrayList<HashMap<String,String>>(); 

現在,嘗試使用ArrayAdapter構造函數使用相同的參數時,它給我一個錯誤。這怎麼能做到?

回答

1

現在,試圖用一個ArrayAdapter構造具有相同 參數時,它給我一個錯誤。

這是因爲一個ArrayAdapter被設計用於非常簡單的場景,其中數據是在一個列表/陣列僅具有單個微件(通常是TextView)以結合的形式。當你在你的佈局三種構件你需要擴展ArrayAdapter類綁定您的數據,因爲它不能做到這一點對自己用的默認實現,這樣的事:

listView.setAdapter(
      new ArrayAdapter<HashMap<String, String>>(this, R.layout.custom_row_view, 
        R.id.text1, listItems) { 

         @Override 
         public View getView(int position, View convertView, 
           ViewGroup parent) { 
          View rowView = super.getView(position, convertView, parent); 
          final HashMap<String, String> item = getItem(position); 
          TextView firstText = (TextView) rowView.findViewById(R.id.text1); 
          firstText.setText(item.get("corresponding_key")); 
          TextView secondText = (TextView) rowView.findViewById(R.id.text2); 
          secondText.setText(item.get("corresponding_key")); 
          TextView thirdText = (TextView) rowView.findViewById(R.id.text3); 
          thirdText.setText(item.get("corresponding_key")); 
          return rowView; 
         } 

      }); 

但在最後有一個問題,爲什麼你要使用ArrayAdapter,當SimpleAdapter更適合你的情況。

+0

在stackoverflow上可能至少有50個問題,詢問如何對列表視圖中的某些數據進行更改,但答案很少。你對這個問題的回答也回答了這50個問題。 – SmulianJulian 2015-05-20 09:14:08

0

你應該定義一個ArrayAdapter這樣的:

ListView listView = (ListView) findViewById(R.id.mylist); 
String[] values = new String[] { "Android", "iPhone", "WindowsMobile", 
    "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", 
    "Linux", "OS/2" }; 

// Define a new Adapter 
// First parameter - Context 
// Second parameter - Layout for the row 
// Third parameter - ID of the TextView to which the data is written 
// Fourth - the Array of data 

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, android.R.id.text1, values); 


// Assign adapter to ListView 
listView.setAdapter(adapter); 
+0

我知道這一點,但我有我自己的佈局,你可以看到上面,以及不止一個'R.id.text $'。請看我的更新,因爲我的值也存儲在'ArrayList >'中。 – arielschon12 2013-03-09 10:16:14

+0

啊,我明白了。我不認爲你可以像這樣使用ArrayAdapter;您將必須實現從BaseAdapter派生的自定義適配器。如果你需要列,爲什麼不使用GridView呢? – crazylpfan 2013-03-09 10:30:20