Android ArrayAdapter中ListView第一行的不同布局
我有一个由ArrayAdapter填充的listView。我希望ListView的第一行/单元格有不同的布局 我还发现了一个非常类似的问题,但cldnt在我的代码中添加了headerView 我已经使用下面的代码实现了这一点: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
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的建议这样做,解决了我的问题…谢谢