【问题标题】:Different layout for first row of ListView in ArrayAdapterArrayAdapter 中 ListView 第一行的不同布局
【发布时间】:2015-04-22 11:33:15
【问题描述】:

我有一个由 ArrayAdapter 填充的 listView。我想要 ListView 的第一行/单元格的不同布局。

我也发现了一个非常相似的问题,但是在我的代码中添加了 headerView Android different Row layout only for first row in BaseAdapter

我已经使用下面的代码实现了:

public class ActorAdapter extends ArrayAdapter<Actors> {
ArrayList<Actors> actorList;
LayoutInflater vi;
int Resource1;
int Resource2;
ViewHolder holder;

public ActorAdapter(Context context, int resource, ArrayList<Actors> objects) {
    super(context, resource, objects);
    vi = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Resource1 = resource;
    Resource2 = resource;
    actorList = objects;
}


@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        holder = new ViewHolder();
        if (position == 0){
            v = vi.inflate(R.layout.first_item, null);
            holder.imageview = (ImageView) v.findViewById(R.id.thumb);
            holder.tvName = (TextView) v.findViewById(R.id.title);

        }
        else{
            v = vi.inflate(R.layout.list_item, null);
            holder.imageview = (ImageView) v.findViewById(R.id.thumb);
            holder.tvName = (TextView) v.findViewById(R.id.title);

        }

        v.setTag(holder);
    } else {
        holder = (ViewHolder) v.getTag();
    }
    holder.imageview.setImageResource(R.drawable.ic_launcher);
    Picasso.with(getContext()).load(actorList.get(position).getImage()).into(holder.imageview);
    String postTitle = actorList.get(position).getName();
    Spanned deTitle = Html.fromHtml(Html.fromHtml((String) postTitle).toString());
    holder.tvName.setText(String.valueOf(deTitle));

    return v;

}

问题是,我的列表最初获取 10 个项目。之后,当用户向下滚动时,我会加载更多文章。现在列表的第 11 项也获得了第 1 项的布局。

此外,当我滚动回顶部时,第一项的布局将更改为其他列表项的布局。

请帮忙。

【问题讨论】:

    标签: android android-layout android-listview android-arrayadapter


    【解决方案1】:

    在您的适配器中覆盖 getViewTypeCount() 以返回 2。覆盖 getItemViewType() 以在位置 0 中返回 0 并为所有其他位置返回 1。这告诉ListView 您有两种不同的行布局,其中第一行(位置 0)与其他行的布局不同。这将确保行回收为您返回正确的行布局。

    【讨论】:

      【解决方案2】:

      ActorAdapter 类中添加这两个方法:

      @Override
      public int getViewTypeCount() {
          return getCount();
      }
      
      @Override
      public int getItemViewType(int position) {
          return position;
      }
      

      【讨论】:

      • 是的,我按照 CommonsWare 的建议这样做并解决了我的问题...谢谢
      猜你喜欢
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      • 2011-06-14
      相关资源
      最近更新 更多