Android ArrayAdapter中ListView第一行的不同布局

Android ArrayAdapter中ListView第一行的不同布局,android,android-layout,android-listview,android-arrayadapter,Android,Android Layout,Android Listview,Android Arrayadapter,我有一个由ArrayAdapter填充的listView。我希望ListView的第一行/单元格有不同的布局 我还发现了一个非常类似的问题,但cldnt在我的代码中添加了headerView 我已经使用下面的代码实现了这一点: public class ActorAdapter extends ArrayAdapter<Actors> { ArrayList<Actors> actorList; LayoutInflater vi; int Resource1; int

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

我还发现了一个非常类似的问题,但cldnt在我的代码中添加了headerView

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

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;

}
公共类Actorapter扩展了ArrayAdapter{
ArrayList actorList;
拉平机vi;
智力资源1;
智力资源2;
视窗座;
公共Actorapter(上下文、int资源、ArrayList对象){
超级(上下文、资源、对象);
vi=(LayoutFlater)上下文
.getSystemService(上下文布局\充气机\服务);
资源1=资源;
资源2=资源;
actorList=对象;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图v=转换视图;
如果(v==null){
holder=新的ViewHolder();
如果(位置==0){
v=vi.充气(R.布局.第一项,空);
holder.imageview=(imageview)v.findViewById(R.id.thumb);
holder.tvName=(TextView)v.findViewById(R.id.title);
}
否则{
v=vi.充气(R.布局.列表项,空);
holder.imageview=(imageview)v.findViewById(R.id.thumb);
holder.tvName=(TextView)v.findViewById(R.id.title);
}
v、 setTag(支架);
}否则{
holder=(ViewHolder)v.getTag();
}
holder.imageview.setImageResource(R.drawable.ic_启动器);
将(actorList.get(position.getImage())加载到(holder.imageview)中;
字符串postTitle=actorList.get(position.getName();
span-deTitle=Html.fromHtml(Html.fromHtml((字符串)postTitle).toString());
holder.tvName.setText(String.valueOf(deTitle));
返回v;
}
问题是,我的列表最初会获取10个项目。之后,随着用户向下滚动,我会加载更多的文章。现在列表的第11个项目也会获取第一个项目的布局

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


请对此提供帮助。

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

在您的
Actorapter
类中添加这两种方法:

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

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

是的,我按照Commonware的建议这样做,解决了我的问题…谢谢