Android将Arraylist数据设置为自定义适配器

时间:2013-11-23 13:15:42

标签: java android twitter arraylist

我有一个包含一些推文的ArrayList<String> statusListTextOnly;。 现在,如果我像这样使用它

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

一切都很好,活动开始,推文在listview中显示。

但是我想深入了解我的应用,我想使用自定义适配器。

所以我做了:

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);

我的推文:

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

它只显示7中的listview

2 个答案:

答案 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 []更改为适配器中的List;) 祝你好运!

答案 1 :(得分:1)

问题来自Tweet类中的这一行:

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

你想在这做什么?我不能说,但你拿下列表中的最后一个标题。