具有编程添加视图的Android ViewHolder模式
我正在创建一个框架布局,然后添加两个视图(一个ImageView和一个TextView) getView()上的我的代码:具有编程添加视图的Android ViewHolder模式,android,Android,我正在创建一个框架布局,然后添加两个视图(一个ImageView和一个TextView) getView()上的我的代码: 我应该如何更改它以使用ViewHolder类。没有可膨胀的布局。对于您的代码,应该是这样的 static class ViewHolder { TextView textView1; ImageView imageView1; } @Override public View getView(final int row, View convertView,
我应该如何更改它以使用ViewHolder类。没有可膨胀的布局。对于您的代码,应该是这样的
static class ViewHolder {
TextView textView1;
ImageView imageView1;
}
@Override
public View getView(final int row, View convertView, final ViewGroup parent) {
ViewHolder holder = null;
FrameLayout frame_layout = (FrameLayout) convertView;
if (frame_layout == null) {
holder = new ViewHolder();
holder.textView1 = new TextView(mContext);
holder.imageView1 = new ImageView(mContext);
frame_layout.setTag(holder);
}
else {
holder = (ViewHolder) frame_layout.getTag();
}
holder.textView1.setText("Set Wallpaper");
holder.textView1.setTextColor(mContext.getResources().getColor(R.color.set_wallpaper_colors));
holder.textView1.setVisibility(View.INVISIBLE);
holder.textView1.setTypeface(holder.textView1.getTypeface(), Typeface.BOLD);
FrameLayout.LayoutParams textview_params = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
textview_params.gravity = Gravity.CENTER;
FrameLayout.LayoutParams imageview_params = new FrameLayout.LayoutParams(
new_width -5, new_width -5 );
holder.imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.imageView1.setPadding(0, 0, 0, 0);
holder.imageView1.setImageResource(mThumbIds[position]);
frame_layout.addView(holder.imageView1, imageview_params);
frame_layout.addView(holder.textView1, textview_params);
return frame_layout;
}
您可以以任何一种方式使用保持架模式。您可以从xml膨胀或动态创建视图。发布您的整个getView方法,以便我们检查。@Tim好的,我已经发布了代码,我正在处理您的代码。我把
holder.imageview_参数
和holder.textview_参数
搞混了。我已经编辑了我的答案并添加了我的代码。你能再详细一点吗?我刚从你的代码中复制的那些行,我已经更新了答案。为什么投否决票?这只是一个指针,按照您的代码进行操作,我不应该为您编写程序?在创建视图时,您不应该只在if()
语句中调用addView()
?否则,当回收convertView
时,您将尝试重新添加视图,这将抛出IllegalStateException
(指定的子级已经有父级)。
static class ViewHolder {
TextView textView1;
ImageView imageView1;
}
@Override
public View getView(final int row, View convertView, final ViewGroup parent) {
ViewHolder holder = null;
FrameLayout frame_layout = (FrameLayout) convertView;
if (frame_layout == null) {
holder = new ViewHolder();
holder.textView1 = new TextView(mContext);
holder.imageView1 = new ImageView(mContext);
frame_layout.setTag(holder);
}
else {
holder = (ViewHolder) frame_layout.getTag();
}
holder.textView1.setText("Set Wallpaper");
holder.textView1.setTextColor(mContext.getResources().getColor(R.color.set_wallpaper_colors));
holder.textView1.setVisibility(View.INVISIBLE);
holder.textView1.setTypeface(holder.textView1.getTypeface(), Typeface.BOLD);
FrameLayout.LayoutParams textview_params = new FrameLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
textview_params.gravity = Gravity.CENTER;
FrameLayout.LayoutParams imageview_params = new FrameLayout.LayoutParams(
new_width -5, new_width -5 );
holder.imageView1.setScaleType(ImageView.ScaleType.CENTER_CROP);
holder.imageView1.setPadding(0, 0, 0, 0);
holder.imageView1.setImageResource(mThumbIds[position]);
frame_layout.addView(holder.imageView1, imageview_params);
frame_layout.addView(holder.textView1, textview_params);
return frame_layout;
}