簡體   English   中英

如何在Android ArrayAdapter中使用對象數組?

[英]How do I use an array of objects with the Android ArrayAdapter?

我需要使用ArrayAdapter填充Android應用程序中的ListView。 為了使用ArrayAdapter ,它說

例如,如果您要在ListView中顯示一個字符串數組,請使用構造函數初始化一個新的ArrayAdapter,以指定每個字符串和字符串數組的布局:

ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_1,myStringArray);

此構造函數的參數為​​:

  • 您的應用上下文
  • 包含每個數組中的字符串的TextView的布局
  • 字符串數組

然后只需在ListView上調用setAdapter()即可:

ListView listView =(ListView)findViewById(R.id.listview); listView.setAdapter(adapter);

但是,我沒有字符串數組,但是有包含字符串值的對象數組。

public class Headers {
    private String from;
    private String to;
    private String subject;

    public Headers (String from, String to, String subject){
        this.from = from;
        this.to = to;
        this.subject = subject;
    }

    public String getFrom() { return from; }
    public void setFrom(String from) { this.from = from; }

    public String getTo() { return to; }
    public void setTo(String to) { this.to = to; }

    public String getSubject() { return subject; }
    public void setSubject(String subject) { this.subject = subject; }
}

我的布局確實包含一個與我的對象中的值相對應的TextView。

這是我的ListView的布局:

<LinearLayout android:orientation="vertical">
    <ListView android:id="@+id/listOfHeaders" >
</LinearLayout>

這是要由ArrayAdapter填充的ListView中每一行的布局:

<LinearLayout android:orientation="horizontal">
    <TextView android:id="@+id/toTextView" />
    <TextView android:id="@+id/fromTextView" />
    <TextView android:id="@+id/subjectTextView" />
</LinearLayout>

僅使用ArrayAdapter是不夠的,您將需要擴展ArrayAdapter並創建一個自定義適配器,因此您可以覆蓋創建的行以使用列表布局。 請檢查以下示例:

public class CustomAdapter extends ArrayAdapter<Headers> {

    Context context;
    int layoutResourceId;
    ArrayList<Headers> data = null;

    public CustomAdapter(Context context, int resource, List<Headers> objects) {
        super(context, resource, objects);
        this.layoutResourceId = resource;
        this.context = context;
        this.data = (ArrayList) objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        HeaderHolder holder = null;

        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);

            holder = new HeaderHolder();
            holder.from = (TextView) row.findViewById(R.id.fromTextView);
            holder.to = (TextView)row.findViewById(R.id.toTextView);
            holder.subject = (TextView)row.findViewById(R.id.subjectTextView);

            row.setTag(holder);
        }
        else
        {
            holder = (HeaderHolder) row.getTag();
        }

        Headers item = data.get(position);
        holder.from.setText(item.getFrom());
        holder.to.setText(item.getTo());
        holder.subject.setText(item.getSubject());

        return row;
    }

    private class HeaderHolder {
        public TextView from;
        public TextView to;
        public TextView subject;

    }
}

對於活動,在onCreate方法上:

ListView list = (ListView) findViewById(R.id.listView);
ArrayList<Headers> data = new ArrayList<Headers>();
data.add(new Headers("from", "to", "subject"));

ArrayAdapter adapter = new CustomAdapter(this, R.layout.list, data);
list.setAdapter(adapter); 

您可以看到CustomAdapter將HeaderHolder用作ViewHolder模式的一部分,因此列表管理非常有效。

對於您的信息,您實際上可以通過重寫getView()方法來實現。 基本上,您必須為ListView項提供自定義布局,並且必須在getView()方法中進行充氣。 有關更多信息,您可以鏈接到此: http : //www.ezzylearning.com/tutorial/customizing-android-listview-items-with-custom-arrayadapter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM