0

我正在尝试创建一个客户ListView我已经设置了布局和getView方法但我不确定如何将新视图从 getView 绑定到我的适配器?

我有一个feedClass扩展ArrayAdapter<String>,我有getView方法:

public class FeedClass extends ArrayAdapter<String> {
private final Context context;

public FeedClass(Context context) {
    super(context, R.layout.feed_item_layout);
    this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.feed_item_layout, parent,
            false);

    ImageView tweetPicture = (ImageView) rowView
            .findViewById(R.id.tweetPicture);
    TextView tweetDescription = (TextView) rowView
            .findViewById(R.id.tweetDescription);
    TextView legends = (TextView) rowView.findViewById(R.id.legends);

    tweetPicture.setImageResource(R.drawable.ic_profile);
    tweetDescription.setText("Hello");
    legends.setText("Legends");

//How to show this data in the ListView?

    return rowView;
}

}

MainActivity其中延伸ListActivity我有这个:

private void activateFeed() {       
//Now I Want to show data in ListView that i am setting in getView?
    ArrayAdapter<String> adptr = new ArrayAdapter<String>(this,
            R.layout.feed_item_layout, ?); //What to pass here?

    setListAdapter(adptr);

}

目前它正在使用一个数组,现在我不知道如何将自定义视图从 getView 传递给这个?请帮忙。

4

3 回答 3

2

您需要扩展 BaseAdapter 并覆盖 getView 方法

public class FeedClass extends BaseAdapter {

private Context context;
private ArrayList<String> arrayList;

public FeedClass(Context context, ArrayList<String> arrayList) {
    this.context = context;
    this.arrayList = arrayList;
}

@Override
public int getCount() {
    return arrayList.size();
}

@Override
public Object getItem(int arg0) {
    return arrayList.get(arg0);
}

@Override
public long getItemId(int arg0) {
    return arg0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View rowView = inflater.inflate(R.layout.feed_item_layout, parent,
            false);

    ImageView tweetPicture = (ImageView) rowView
            .findViewById(R.id.tweetPicture);
    TextView tweetDescription = (TextView) rowView
            .findViewById(R.id.tweetDescription);
    TextView legends = (TextView) rowView.findViewById(R.id.legends);

    tweetPicture.setImageResource(R.drawable.ic_profile);
    // set the text from the ArrayList
    tweetDescription.setText(arrayList.get(position));
    // set the text from the ArrayList
    legends.setText(arrayList.get(position));

    return rowView;
}
}
于 2013-10-18T11:52:18.353 回答
1

我假设您有一个名为 feedClass 的自定义适配器,并且您希望将其设置为ListActivity

  LayoutInflater inflater;
  public FeedClass(Context context)
  {
     super(context, R.layout.feed_item_layout);
     inflater = LayoutInflater.from(context);  
     // no need to initialize everytime in getview
     // so you can initialize in the constructor
  }

还可以使用ViewHolder模式来实现平滑滚动和性能

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

现在

 FeedClass fc = new FeedClass(MainActivity.this);
 setListAdapter(fc);  

我在网上找到的例子

http://android.vexedlogic.com/2011/04/02/android-lists-listactivity-and-listview-ii-%E2%80%93-custom-adapter-and-list-item-view/

于 2013-10-18T11:42:52.563 回答
1

ListActivity 有自己的适配器实现,您已经以正确的方式完成了,但是如果您想使用自己的 Adapter 类实例,那么您需要扩展您的活动文件以扩展 Activity,然后您可以使用您的适配器 getView 方法

于 2013-10-18T11:43:50.607 回答