0
好吧,所以我想用一个自定义适配器使用网格视图,4列。我遇到两个很奇怪的问题Android与GridView的奇怪问题
问题#1:非常奇怪,当它加载时,第1行第1列为空。然后,当我开始向下滚动时,第一行变为可见的第一列是空白的。但是当我滚动回到顶部时,显示的是空白视图。
问题2:一旦我开始滚动,如果我快速跳到顶部,网格会超出其界限,一旦它滚动到我什么都看不到的地步,我无法滚动,gridView失去或完全看不见。
我针对的是API 21,所以这是在我的Lolipop设备上,但我已经在kitkat 4.4.2上测试过,并获得了完全相同的行为。
这里是我的GridView布局/初始化 活动布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/gridView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="4"/>
</RelativeLayout>
活动,初始化的GridView
ArrayList<AppDetail> appList = getInstalledApps();
AppGridAdapter adapter = new AppGridAdapter(this, android.R.layout.simple_gallery_item, appList);
GridView gridView = (GridView)findViewById(R.id.gridView);
gridView.setAdapter(adapter);
AppGridAdapter.java(进口删除)
public class AppGridAdapter extends ArrayAdapter<AppDetail> {
public AppGridAdapter(Context context, int rid, List<AppDetail> list) {
super(context, rid, list);
}
public View getView(int position, View view, ViewGroup parent) {
if (view == null) {
LayoutInflater inflater =
(LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.app_grid_item, parent, false);
// set width/height = 1/4 parent width
int len = parent.getWidth()/4;
AbsListView.LayoutParams params = (AbsListView.LayoutParams)view.getLayoutParams();
params.width = len;
params.height = len;
view.setLayoutParams(params);
ViewHolder holder = new ViewHolder();
holder.imgIcon = (ImageView)view.findViewById(R.id.imgAppIcon);
holder.tvLabel = (TextView)view.findViewById(R.id.tvAppLabel);
view.setTag(holder);
}
AppDetail app = getItem(position);
ViewHolder holder = (ViewHolder)view.getTag();
holder.imgIcon.setImageDrawable(app.icon);
holder.tvLabel.setText(app.label);
return view;
}
private static class ViewHolder {
ImageView imgIcon;
TextView tvLabel;
}
}
所以你可以看到代码非常简单直接。这是我一直用于我的自定义适配器的格式。我不知道它有什么问题。 任何想法? 谢谢。
您是否试过在调试器(或日志记录)中逐步执行代码并确保'parent.getWidth()'不为零?似乎这可能是唯一可能的问题。可能在读取第一个视图时被称为过早。 – blad 2014-12-06 23:42:31
好吧,我假设孩子在这一点上应该膨胀,父母已经膨胀了。但除了少数描述的其他项目都可以正确显示。 – 2014-12-06 23:48:56
不要紧,你似乎很接近。 – 2014-12-07 01:37:08