Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/212.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getView()位置=1中的Android:convertView参数在应为null时始终不为null_Android_Gridview_Adapter - Fatal编程技术网

getView()位置=1中的Android:convertView参数在应为null时始终不为null

getView()位置=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来动态显示图片。当图片为2时,位置=1的convertview始终不为空?为什么? 我不会问为什么多次调用getView(),我的问题是为什么position=1在第一次调用时总是不为null,而其他位置都为null

    <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。非常感谢你。这篇文章是我真正想要的,我知道我的错误~