2013-11-23 89 views
1

我有一個ArrayList<String> statusListTextOnly;,其中包含一些推文。 現在,如果我使用這樣的Android將Arraylist數據設置爲自定義適配器

i.setAdapter(new ArrayAdapter<String>(MainActivity.this, 
      android.R.layout.simple_list_item_1, statusListTextOnly)); 

一切都很好,在活動開始和鳴叫顯示列表視圖。

但是我想深入我的應用程序,我想使用自定義適配器。

所以我做:

Tweet[] tweets; 
TweetAdapter adapter; 

    Tweet weather_data[] = new Tweet[] { 
     new Tweet(statusListTextOnly) 
    }; 

    adapter = new TweetAdapter(MainAcitivity.this, 
      R.layout.listview_item_row, weather_data); 

    i.setAdapter(adapter); 

我分享Tweet類:

public class Tweet { 
    public String title; 

    public Tweet(){ 
     super(); 
    } 

    public Tweet(ArrayList<String> title) { 
     super(); 
     for(String s : title) 
     this.title = s; 
    } 
} 

我TweetAdapter類:

public class TweetAdapter extends ArrayAdapter<Tweet>{ 

    Context context; 
    int layoutResourceId; 
    Tweet data[] = null; 

    public TweetAdapter(Context context, int layoutResourceId, Tweet[] data) { 
     super(context, layoutResourceId, data); 
     this.layoutResourceId = layoutResourceId; 
     this.context = context; 
     this.data = data; 
    } 

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

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

      holder = new TweetHolder(); 
      holder.txtTitle = (TextView)row.findViewById(R.id.textView1); 

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

     Tweet tweet = data[position]; 
     holder.txtTitle.setText(tweet.title); 

     return row; 
    } 

    static class TweetHolder 
    { 
     TextView txtTitle; 
    } 
} 

現在,當我運行它,只有一個鳴叫顯示(最後一條推文)。沒關係,但listview只有一個項目,只有一條推文顯示不是整個推文列表。

ex。statusListTextOnly包含:

1, 
2, 
3. 
5, 
6, 
7 

只顯示7listview

+0

pass MainActivity.this insted of getBaseContext() –

+0

謝謝,我已經更新了問題 –

回答

3
public Tweet(ArrayList<String> title) { 
    super(); 
    for(String s : title) 
    this.title = s; 
} 

每次你重寫你的標題值,所以你只能看到標題的ArrayList的最後一個值。在此構造改變你的邏輯,以某種這樣的:

public Tweet(String title) { 
    this.title = title; 
} 

然後執行:

List<Tweet> tweets = new ArratList<Tweet>(); 
for (String s: statusListTextOnly) 
    tweets.add(new Tweet(s)) 

,並把tweets您ArrayAdapter,不要忘了改資料Tweet [],在列表適配器;) 祝你好運!

+0

非常感謝! –

+0

本來值得一提的是任何啓發你的答案...... – Snicolas

1

問題來源於此行分享Tweet類:

for(String s : title) 
    this.title = s; 

那你究竟想在這裏做什麼?我不能說,但你把最後一個標題放在列表中。

相關問題