当前位置:首页 > 今天的世界杯

GridView踩坑记--GridView无法显示Item的问题

admin 2025-09-27 06:04:35 8660

1.适配器没有使用ViewHolder

错误代码:

class ViewHolder {

public TextView tv;

public ShapeableImageView iv;

}

@Override

public View getView(int i, View view, ViewGroup viewGroup) {

if(view == null){

view = LayoutInflater.from(mContext).inflate(R.layout.navigation_item, viewGroup, false);

iv = view.findViewById(R.id.item_iv);

tv = view.findViewById(R.id.item_tv);

}else{

iv = view.findViewById(R.id.item_iv);

tv = view.findViewById(R.id.item_tv);

}

int pos = i + mPageIndex * mGridViewItemCnt;

tv.setText(mNavigationDataList.get(pos).getTitle());

iv.setImageResource(mNavigationDataList.get(pos).getAvatarUri());

return view;

}

这些iv,tv跟返回的view有几把毛关系?

正确代码:

class ViewHolder {

public TextView tv;

public ShapeableImageView iv;

}

@Override

public View getView(int i, View view, ViewGroup viewGroup) {

ViewHolder holder;

if(view == null){

view = LayoutInflater.from(mContext).inflate(R.layout.navigation_item, viewGroup, false);

holder = new ViewHolder();

holder.iv = view.findViewById(R.id.item_iv);

holder.tv = view.findViewById(R.id.item_tv);

view.setTag(holder);

}else{

holder = (ViewHolder) view.getTag();

}

int pos = i + mPageIndex * mGridViewItemCnt;

holder.tv.setText(mNavigationDataList.get(pos).getTitle());

holder.iv.setImageResource(mNavigationDataList.get(pos).getAvatarUri());

return view;

}

2.item间距过大,同时GridView的numColumns又设置得很大

比如下面的布局,列数是4的时候无法显示,当改成1或者2的时候能显示。

android:id="@+id/grid_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:numColumns="4"

android:verticalSpacing="10dp"

>

3. item布局过宽

这是GridView的Item布局

android:layout_width="wrap_content"

android:layout_height="wrap_content"

xmlns:app="http://schemas.android.com/apk/res-auto">

android:id="@+id/item_iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@mipmap/ic_launcher"

android:layout_marginLeft="10dp"

app:shapeAppearance="@style/circleStyle"

>

android:id="@+id/item_tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center"

android:layout_below="@id/item_iv"

android:text="跑腿">

叼你公龟的把imageView设成wrap_content是有病是吧?