【发布时间】:2013-09-09 09:51:56
【问题描述】:
我正在制作一个自定义适配器。我的ListView 的 list_item 本身有一个LinearLayout,稍后我将在其中添加ImageViews。
我正在使用以下代码:
public class Adapter extends ArrayAdapter<Row_Item> {
private java.util.List<Row_Item> List;
private Context context;
public Adapter(List<Row_Item> list, Context ctx) {
super(ctx, R.layout.row_item, list);
this.List = list;
this.context = ctx;
}
public int getCount() {
return List.size();
}
public Row_Item getItem(int position) {
return List.get(position);
}
public long getItemId(int position) {
return List.get(position).hashCode();
}
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
TopicHolder holder = new TopicHolder();
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.row_item, null);
TextView tv = (TextView) v.findViewById(R.id.textView);
*LinearLayout* l = (LinearLayout) v.findViewById(R.id.myLayout);
holder.topic = tv;
holder.myLayout = l;
v.setTag(holder);
} else
holder = (TopicHolder) v.getTag();
Row_Item p = List.get(position);
holder.topic.setText(p.getName());
ImageView imgUsers;
for (int i = 0; i < some_parameter; i++) { imgUsers = new ImageView(context);
imgUsers.setImageResource(some_image);
holder.myLayout.addView(imgUsers); //add that image to my linearlayout
}
return v;
}
private static class TopicHolder {
public TextView topic;
public LinearLayout myLayout;
// public ImageView notifications;
}
}
所以这里发生的是getView() 被无限调用。另外,我在调用此适配器的类中设置了onItemClickListener。由于适配器类没有终止,监听器不工作,应用程序保持静止。
另外,我尝试过myLayout.getChildCount() 之类的方法,如果它大于图像数量,则返回,但无限循环仍然没有终止。
【问题讨论】:
-
自定义适配器无需调用 super
-
getView 中是否需要 for 循环?是否需要在单个列表项中设置多个图像?还是每个列表项只有一张图片?如果只需要一张图片,您需要删除 getView 中的 for 循环..
-
getView 将根据列表中有多少项目被调用。那就是从 getCount() 返回的可能。它不会被无限调用。这里的 some_parameter 是什么?
-
请去扔一些很好的自定义列表视图教程,网上有很多很好的教程
-
@amj 是的,我正在插入多个图像。这是由 myLinearLayout.addView(imgUsers) 完成的
标签: android android-layout android-listview custom-adapter