将 list<data> 传递给自定义适配器
pass list<data> to custom adapter
我通过编写以下代码为自定义适配器创建了一个列表:
public class TweetListActivity extends ListActivity {
private ListView tweetListView;
private ArrayAdapter tweetItemArrayAdapter;
private final List<Tweet> tweets = new ArrayList<Tweet>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tweet_list);
for (int i = 1; i < 21; i++)
{
Tweet tweet = new Tweet();
tweet.setTitle("A nice header for Tweet # " + i);
tweet.setBody("Some random body text for the tweet # " + i);
tweets.add(tweet);
}
tweetItemArrayAdapter = new TweetAdapter(this,tweets);
setListAdapter(tweetItemArrayAdapter);
}
}
TweetAdapter
的代码如下
public class TweetAdapter extends ArrayAdapter<Tweet>
{
private List<Tweet> tweetslocal;
private Context context;
private LayoutInflater inflater;
public TweetAdapter(Activity activity, List<Tweet> tweets) {
super(activity, R.layout.row_tweet, tweets);
inflater = activity.getWindow().getLayoutInflater();
tweetslocal = tweets;
}
@Override
public Tweet getItem(int arg0) {
return tweetslocal.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.row_tweet, parent, false);
TextView tweetTitle = (TextView) row.findViewById(R.id.tweetTitle);
Tweet tweet = tweetslocal.get(position);
tweetTitle.setText(tweet.getTitle());
TextView tweetBody = (TextView) row.findViewById(R.id.tweetBody);
tweetBody.setText(tweet.getBody());
return row;
}
}
但是,我没有得到想要的输出。该列表显示所有带有 header 20 的推文,而不是从推文 1 到推文 20 的增量推文。
如果您的 TweetAdapter 中名为 tweets 的数组:
public View getView(int position, View convertView, ViewGroup parent){
Tweet tweet = tweets.get(position);
// TODO using tweet.
}
你是这个意思吗?
查看您的代码,我发现您已经将推文列表传递给您的 TweetAdapter
。
在 TweetAdapter
中声明 Tweet
的列表:
private List<Tweet> tweets;
然后,确保您的构造函数如下所示:
public TweetAdapter(Context ctx, List<Tweet> tweets) {
this.context = ctx; //Context == activity
this.tweets = tweets;
}
现在,在您的 getView()
中,您可以这样做:
final Tweet currentTweet = tweets.get(position);
希望对您有所帮助!
已解决
已实施
进口java.io.Serializable;
在Tweet.java
我通过编写以下代码为自定义适配器创建了一个列表:
public class TweetListActivity extends ListActivity {
private ListView tweetListView;
private ArrayAdapter tweetItemArrayAdapter;
private final List<Tweet> tweets = new ArrayList<Tweet>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tweet_list);
for (int i = 1; i < 21; i++)
{
Tweet tweet = new Tweet();
tweet.setTitle("A nice header for Tweet # " + i);
tweet.setBody("Some random body text for the tweet # " + i);
tweets.add(tweet);
}
tweetItemArrayAdapter = new TweetAdapter(this,tweets);
setListAdapter(tweetItemArrayAdapter);
}
}
TweetAdapter
的代码如下
public class TweetAdapter extends ArrayAdapter<Tweet>
{
private List<Tweet> tweetslocal;
private Context context;
private LayoutInflater inflater;
public TweetAdapter(Activity activity, List<Tweet> tweets) {
super(activity, R.layout.row_tweet, tweets);
inflater = activity.getWindow().getLayoutInflater();
tweetslocal = tweets;
}
@Override
public Tweet getItem(int arg0) {
return tweetslocal.get(arg0);
}
@Override
public long getItemId(int arg0) {
return arg0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = inflater.inflate(R.layout.row_tweet, parent, false);
TextView tweetTitle = (TextView) row.findViewById(R.id.tweetTitle);
Tweet tweet = tweetslocal.get(position);
tweetTitle.setText(tweet.getTitle());
TextView tweetBody = (TextView) row.findViewById(R.id.tweetBody);
tweetBody.setText(tweet.getBody());
return row;
}
}
但是,我没有得到想要的输出。该列表显示所有带有 header 20 的推文,而不是从推文 1 到推文 20 的增量推文。
如果您的 TweetAdapter 中名为 tweets 的数组:
public View getView(int position, View convertView, ViewGroup parent){
Tweet tweet = tweets.get(position);
// TODO using tweet.
}
你是这个意思吗?
查看您的代码,我发现您已经将推文列表传递给您的 TweetAdapter
。
在 TweetAdapter
中声明 Tweet
的列表:
private List<Tweet> tweets;
然后,确保您的构造函数如下所示:
public TweetAdapter(Context ctx, List<Tweet> tweets) {
this.context = ctx; //Context == activity
this.tweets = tweets;
}
现在,在您的 getView()
中,您可以这样做:
final Tweet currentTweet = tweets.get(position);
希望对您有所帮助!
已解决
已实施
进口java.io.Serializable;
在Tweet.java