ArrayAdapter 中 ListView 第一行的不同布局
Different layout for first row of ListView in ArrayAdapter
我有一个由 ArrayAdapter 填充的 listView。我想要 ListView 的第一个 Row/Cell 有不同的布局。
我也发现了一个非常相似的问题,但是 cldnt 在我的代码中添加了 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 项也得到第一项的布局。
此外,当我滚动回顶部时,第一项的布局更改为其他列表项的布局。
请帮忙解决这个问题。
将适配器中的 getViewTypeCount()
覆盖为 return 2. 将位置 0 的 getItemViewType()
覆盖为 return 0,所有其他位置的覆盖为 return 1。这告诉 ListView
您有两种不同的行布局,其中第一行(位置 0)的布局与其他行的布局不同。这将确保行回收为您的位置返回正确的行布局。
在你的 ActorAdapter
class:
添加这两个方法
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}
我有一个由 ArrayAdapter 填充的 listView。我想要 ListView 的第一个 Row/Cell 有不同的布局。
我也发现了一个非常相似的问题,但是 cldnt 在我的代码中添加了 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 项也得到第一项的布局。
此外,当我滚动回顶部时,第一项的布局更改为其他列表项的布局。
请帮忙解决这个问题。
将适配器中的 getViewTypeCount()
覆盖为 return 2. 将位置 0 的 getItemViewType()
覆盖为 return 0,所有其他位置的覆盖为 return 1。这告诉 ListView
您有两种不同的行布局,其中第一行(位置 0)的布局与其他行的布局不同。这将确保行回收为您的位置返回正确的行布局。
在你的 ActorAdapter
class:
@Override
public int getViewTypeCount() {
return getCount();
}
@Override
public int getItemViewType(int position) {
return position;
}