2012-04-02 100 views
2

我有需要在Android ListView上顯示的WS數據。 數據可以是不同的類型,所以我需要動態創建一個ListView項目的佈局,我該怎麼做?我認爲我必須使用LayoutInflater,但一直使用它與現有的佈局,從未從頭開始創建佈局。我該怎麼做?以編程方式在Android中創建列表視圖項目

回答

2

您需要創建爲

適配器只是檢查這個環節就闡述所有關於使用適配器。在給定的URL

http://www.vogella.de/articles/AndroidListView/article.html

//編輯

只是檢查這個代碼

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.rowlayout, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.rowlayout, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
     textView.setText(values[position]); 
     // Change the icon for Windows and iPhone 
     String s = values[position]; 
     if (s.startsWith("iPhone")) { 
      imageView.setImageResource(R.drawable.no); 
     } else { 
      imageView.setImageResource(R.drawable.ok); 
     } 

     return rowView; 
    } 
} 

其中R.layout.rowlayout是你的每一行 的佈局中,你可以定義你的圖像瀏覽,文字瀏覽

+0

vogella網站有很棒的教程,但無法找到一個從頭開始創建佈局的示例,其中添加了視圖。我看到的所有例子都使用了預先存在的xml佈局。我想避免這種情況。 – Cris 2012-04-02 12:53:15

+0

好吧,那你爲什麼不嘗試通過新對象創建它們作爲ListView list = new ListView(context)); – vipin 2012-04-02 12:54:53

+0

克里斯解決方案爲你工作嗎? – vipin 2012-04-02 13:21:23

1

正如你所說的你使用不同的數據類型,我假設你想顯示differen每個數據類型的佈局。沒有必要動態創建你的listview-items;如果你願意,你可以從XML中膨脹它們。

創建自定義列表適配器(請參閱vipin提供的vogella鏈接)並覆蓋getView(),getItemViewType()getViewTypeCount()方法。

getView()中,您可以通過編程方式構建您的視圖,也可以通過XML將它們膨脹。要確定要膨脹(或構建)哪個佈局,請致電getItemViewType(position),檢查它返回的值,然後選擇要爲該值膨脹的佈局。有關如何構建XML佈局的更多信息,請參見this page in the dev guide on XML layouts

接下來,看看this answer並將其實現到您的適配器中。一定要閱讀評論。例如,覆蓋getItemViewType()的東西,如:

public int getItemViewType(int position) { 

    if(getItem(position) instanceOf ItemA) { 
     return 0; 
    } else { 
     return 1; 
    } 
} 

這種方法允許你的ListView回收視圖,並使用ViewHolder模式(有關詳細信息,再次看到提供的鏈接VIPIN)。

相關問題