如何在getView方法中访问数组列表

时间:2015-08-03 09:12:53

标签: java android twitter getview

这是我的适配器代码的一部分,请帮助我如何在getView方法中访问ArrayList,以便我能够修改布局文件的textview中的文本。

public TweetAdapter(Activity activity,List<Tweet> tweets){

    super(activity, R.layout.row_tweet, tweets);
    List<Tweet> myTweets=tweets;
    inflater=activity.getWindow().getLayoutInflater();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // The super.getView is enough to crash the application.
    // Need to understand why it does this.
    //super.getView(position, convertView, parent);
    TextView tweetTitle=(TextView)convertView.findViewById(R.id.tvTweetTitle);
    tweetTitle.setText();

    return inflater.inflate(R.layout.row_tweet, parent, false);
}

6 个答案:

答案 0 :(得分:0)

您在Adapter的构造函数中传递了List,这意味着您的Adapter中有列表。只需更改:

List<Tweet> tweets;
LayoutInflater inflater;
Activity activity;
public TweetAdapter(Activity activity,List<Tweet> tweets){

//super(activity, R.layout.row_tweet, tweets);  remove this line.
this.tweets=tweets;
this.activity = activity;
 inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

}

现在您可以使用tweets.get(index);来获取数据。也可以尝试在适配器中使用ViewHolder Pattern

将您的getView更改为:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    // The super.getView is enough to crash the application.
    // Need to understand why it does this.
    //super.getView(position, convertView, parent);
        convertView = inflater.inflate(R.layout.dropdown_layout, parent, false);
        TextView tweetTitle=(TextView)convertView.findViewById(R.id.tvTweetTitle);
        tweetTitle.setText();

    return convertView;
}

答案 1 :(得分:0)

你在构造函数中有数组列表并且在getView()中有位置,所以可以按照以下方式访问数组列表。

class TweetAdapter extends ArrayAdapter{

private ArrayList<Tweets> mTweetList;

public TweetAdapter(Activity activity, ArrayList<Tweet> tweets){
    super(activity, R.layout.row_tweet, tweets);
    mTweetList = tweets;
    inflater=activity.getWindow().getLayoutInflater();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    String data = mTweetList.get(position);  //Access Array List
    TextView tweetTitle=(TextView)convertView.findViewById(R.id.tvTweetTitle);
    tweetTitle.setText(data);
    return inflater.inflate(R.layout.row_tweet, parent, false);
}}

答案 2 :(得分:0)

您必须给行充气,然后从膨胀的视图中获取TextView并设置其文本。

View rowView = inflater.inflate(R.layout.row_tweet, parent, false);
TextView tweetTitle = (TextView)rowView.findViewById(R.id.tvTweetTitle);
tweetTitle.setText(data);
return rowView;

编辑:添加返回rowView而不是再次膨胀布局并返回它。

答案 3 :(得分:0)

我试过这样做但是......它没有填充数组列表中的数据!!!

  

试试这个。可能对你有所帮助.....

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    // The super.getView is enough to crash the application.
    // Need to understand why it does this.
    //super.getView(position, convertView, parent);
    View rowView = inflater.inflate(R.layout.row_tweet, parent, false);
    TextView tweetTitle = (TextView)rowView.findViewById(R.id.tvTweetTitle);

    Tweet data = mTweetList.get(position);

    tweetTitle.setText(data.getTitle());
    return inflater.inflate(R.layout.row_tweet, parent, false);
}

答案 4 :(得分:0)

您可以轻松修改标题文字 例如

 List<Tweet> myTweets;
 public TweetAdapter(Activity activity,List<Tweet> tweets)
 {

    super(activity, R.layout.row_tweet, tweets);
    myTweets = tweets;

    inflater=activity.getWindow().getLayoutInflater();
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent)  
 {
     LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        convertView = inflater.inflate(R.layout.row_tweet, parent,false);
    TextView tweetTitle=(TextView)convertView.findViewById(R.id.tvTweetTitle);
    tweetTitle.setText(myTweets.get(position).title);

   return convertView;
 }

假设你的Tweet.java类是这样的,例如

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

答案 5 :(得分:-1)

检查此链接是否有帮助:

https://github.com/codelearn-org/CodelearnTwitterApp/blob/master/src/org/codelearn/twitter/TweetAdapter.java

public class TweetAdapter extends ArrayAdapter<Tweet> {

     private LayoutInflater inflater;
     private List<Tweet> tweetsLocal;

     public TweetAdapter(Activity activity, List<Tweet> tweets){
         super(activity, R.layout.row_tweet, tweets);
         inflater = activity.getWindow().getLayoutInflater();
         tweetsLocal = tweets;
     }

     @Override
     public View getView(int position, View convertView, ViewGroup parent){
         View row = inflater.inflate(R.layout.row_tweet, parent, false);
         TextView title = (TextView) row.findViewById(R.id.tweetTitle);
         Tweet tweet = tweetsLocal.get(position);
         title.setText(tweet.getTitle());
         TextView body = (TextView) row.findViewById(R.id.textView2);
         body.setText(tweet.getBody());
         return row;
     }

}