getView()位置=1中的Android:convertView参数在应为null时始终不为null
我有一个gridview来动态显示图片。当图片为2时,位置=1的convertview始终不为空?为什么? 我不会问为什么多次调用getView(),我的问题是为什么position=1在第一次调用时总是不为null,而其他位置都为nullgetView()位置=1中的Android:convertView参数在应为null时始终不为null,android,gridview,adapter,Android,Gridview,Adapter,我有一个gridview来动态显示图片。当图片为2时,位置=1的convertview始终不为空?为什么? 我不会问为什么多次调用getView(),我的问题是为什么position=1在第一次调用时总是不为null,而其他位置都为null <Gridview android:id="@+id/tgv_image_select" android:layout_width="270dip" android:layout_height="
<Gridview
android:id="@+id/tgv_image_select"
android:layout_width="270dip"
android:layout_height="wrap_content"
android:layout_marginBottom="10dip"
android:layout_marginLeft="@dimen/margin_10dp"
android:gravity="center"
android:horizontalSpacing="10dip"
android:numColumns="4"
android:verticalSpacing="10dip" />
public class SelectImageGridViewAdapter extends BaseListAdapter<ImageItem> {
private LoadFrescoImage loadFrescoImage;
public SelectImageGridViewAdapter(Context context) {
super(context);
loadFrescoImage = new LoadFrescoImage(Application.getInstance());
}
public void addImageItem(ImageItem imageItem) {
if (imageItem == null) return;
getData().add(imageItem);
notifyDataSetChanged();
}
public void addImageItemLists(List<ImageItem> lists) {
if(lists == null) return;
getData().addAll(lists);
notifyDataSetChanged();
}
public void removeItem(int position) {
getData().remove(position);
notifyDataSetChanged();
}
public void reloadImageItem(List<ImageItem> lists) {
if (lists == null) return;
setData(lists);
notifyDataSetChanged();
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
Holder holder;
if (convertView == null) {
holder = new Holder();
convertView = mInflater.inflate(R.layout.grid_view_item, null);
holder.mSelectImage = (ImageView)
convertView.findViewById(R.id.iv_icon);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
if (getData().size() > 0 && position != getData().size()) {
holder.mSelectImage.setVisibility(View.VISIBLE);
ImageItem imageItem = getData().get(position);
if (imageItem != null) {
String imguri = BitmapUtil.IMAGE_URI_SUFFIX_SDCARD + imageItem.getImageUri().getPath();
Uri ImgUri = Uri.parse(imguri);
loadFrescoImage.LoadImage(ImgUri,holder.mSelectImage);
}
}
} else {
if (position == Fragment.DEFAULT_PHOTO_COUNT) {
holder.mSelectImage.setVisibility(View.GONE);
} else {
holder.mSelectImage.setVisibility(View.VISIBLE);
holder.mSelectImage.setImageURI(BusinessUtil.getResourceUri(convertView.getContext(),R.drawable.guild_icon_img));
}
}
return convertView;
}
class Holder {
private ImageView mSelectImage;
}
}
when I choose 2 picture The log is :
mytestnew convertView = nullposition =0
mytestnew convertView = android.widget.FrameLayout{3f51f239 V.E.....
......I. 0,0-0,0 #7f0b0117 app:id/fl_item}position =0
....
mytestnew convertView = android.widget.FrameLayout{3f51f239 V.E.....
......I. 0,0-0,0 #7f0b0117 app:id/fl_item}position =1
But,When I choose more than 2 pictures,the log is :
mytestnew convertView = nullposition =0
mytestnew convertView = android.widget.FrameLayout{3921e34b V.E.....
........ 0,0-180,180 #7f0b0117 app:id/fl_item}position =0
......
mytestnew convertView = android.widget.FrameLayout{21daf777 V.E.....
......I. 0,0-0,0 #7f0b0117 app:id/fl_item}position =1
mytestnew convertView = null position =2
mytestnew convertView = null position =3
公共类SelectImageGridViewAdapter扩展BaseListAdapter{
私人加载FrescoImage加载FrescoImage;
public SelectImageGridViewAdapter(上下文){
超级(上下文);
loadFrescoImage=新的loadFrescoImage(Application.getInstance());
}
公共无效addImageItem(ImageItem ImageItem){
if(imageItem==null)返回;
getData().add(imageItem);
notifyDataSetChanged();
}
公共无效AddImageItemList(列表列表){
if(lists==null)返回;
getData().addAll(列表);
notifyDataSetChanged();
}
公共无效删除项(内部位置){
getData()。移除(位置);
notifyDataSetChanged();
}
公共void重载ImageItem(列表){
if(lists==null)返回;
setData(列表);
notifyDataSetChanged();
}
@凌驾
公共视图getView(最终整型位置、视图转换视图、最终视图组父视图){
持有人;
if(convertView==null){
保持架=新保持架();
convertView=mInflater.充气(R.layout.grid\u view\u项,空);
holder.mSelectImage=(图像视图)
convertView.findViewById(R.id.iv_图标);
convertView.setTag(支架);
}否则{
holder=(holder)convertView.getTag();
}
如果(getData().size()>0&&position!=getData().size()){
holder.mSelectImage.setVisibility(View.VISIBLE);
ImageItem ImageItem=getData().get(位置);
如果(imageItem!=null){
字符串imguri=BitmapUtil.IMAGE\u URI\u SUFFIX\u SDCARD+imageItem.getImageUri().getPath();
uriimguri=Uri.parse(ImgUri);
loadFrescoImage.LoadImage(ImgUri,holder.mSelectImage);
}
}
}否则{
如果(位置==碎片。默认照片计数){
holder.mSelectImage.setVisibility(View.GONE);
}否则{
holder.mSelectImage.setVisibility(View.VISIBLE);
holder.mSelectImage.setImageURI(BusinessUtil.getResourceUri(convertView.getContext(),R.drawable.guild_icon_img));
}
}
返回视图;
}
阶级持有者{
私有图像视图mSelectImage;
}
}
当我选择2图片时,日志为:
mytestnew convertView=nullposition=0
mytestnew convertView=android.widget.FrameLayout{3f51f239 V.E。。。。。
……I.0,0-0,0#7f0b0117应用程序:id/fl#U项目}位置=0
....
mytestnew convertView=android.widget.FrameLayout{3f51f239 V.E。。。。。
……I.0,0-0,0#7f0b0117应用程序:id/fl#U项目}位置=1
但是,当我选择两张以上的图片时,日志是:
mytestnew convertView=nullposition=0
mytestnew convertView=android.widget.FrameLayout{3921e34b V.E。。。。。
……0,0-180180#7f0b0117应用程序:id/fl#U项目}位置=0
......
mytestnew convertView=android.widget.FrameLayout{21daf777 V.E。。。。。
……I.0,0-0,0#7f0b0117应用程序:id/fl#U项目}位置=1
mytestnew convertView=null位置=2
mytestnew convertView=null位置=3
为什么位置=1始终不为空,而另一个位置为空?详细信息GridView回收机制参考。代码不应该关心converview。感谢@MikeM和@Karakuri请发布适配器的完整代码。答案的可能副本基本上是说它不重要,也不应该重要。如果
convertView
为null
,则将其充气。无法保证在getView()
中传递什么。不要假设调用getView()
的次数、调用时间或调用顺序。@MikeM。非常感谢你。这篇文章是我真正想要的,我知道我的错误~