GridView的Android Strange问​​题

时间:2014-12-06 23:25:47

标签: android android-layout gridview android-gridview android-adapter

好的,我试图使用带有自定义适配器的网格视图,4列。我有两个非常奇怪的问题

问题#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;
    }
}

因此,您可以看到代码非常简单直接。这是我一直用于自定义适配器的格式。我不知道它有什么问题。 有任何想法吗? 感谢。

1 个答案:

答案 0 :(得分:0)

BTellez是对的。问题在于在膨胀时改变视图边界。刚删除该块,它现在可以正常工作。