0

GridView在我的应用程序中使用,我将列数设置为 2,它工作正常,但如果网格中的项目数大于 8 个项目,它开始重复第一个项目。

我想达到 14 个项目而不重复任何项目。谢谢!

这是我的gridview xml

 <GridView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="160dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="2"
    android:paddingTop="10dp"
    android:layout_below="@id/View1"
    android:stretchMode="columnWidth"
    android:verticalSpacing="20dp" />

![这是屏幕截图,到达 (cotact 8) 后,它会重复 (cotact 1)、(cotact 2) ...等][1] 这是我的适配器

public View getView(int position, View convertView, ViewGroup parent)
    {

        View v;


        if (convertView == null) {  // if it's not recycled, initialize some attributes

            LayoutInflater li = (LayoutInflater) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
            v = li.inflate(R.layout.icon_launcher, null);

            TextView tv = (TextView)v.findViewById(R.id.icon_text); 
            ImageButton ib = (ImageButton)v.findViewById(R.id.icon_image);              
            LinearLayout icon = (LinearLayout)v.findViewById(R.id.icon_launcher);

            //icon.setLayoutParams(new GridView.LayoutParams(203,200));
            ib.setScaleType(ib.getScaleType().FIT_XY);          
            ib.setPadding(1,1,1,1);
            ib.setFocusable(false);
            ib.setClickable(false);          
            ib.setImageBitmap(BitmapFactory.decodeFile(mThumbIds.get(position)));

            tv.setText(mTextsIds.get(position));
 } else

        {
            v = (View) convertView;


        }


        return v;
    }
4

2 回答 2

1

试试这个修复。

public View getView(int position, View convertView, ViewGroup parent) {



        if (convertView == null) { // if it's not recycled, initialize some
                                    // attributes

            LayoutInflater li = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = li.inflate(R.layout.icon_launcher, null);


        } 

        TextView tv = (TextView) convertView.findViewById(R.id.icon_text);
        ImageButton ib = (ImageButton) convertView.findViewById(R.id.icon_image);
        LinearLayout icon = (LinearLayout) convertView
                        .findViewById(R.id.icon_launcher);

        // icon.setLayoutParams(new GridView.LayoutParams(203,200));
        ib.setScaleType(ib.getScaleType().FIT_XY);
        ib.setPadding(1, 1, 1, 1);
        ib.setFocusable(false);
        ib.setClickable(false);
        ib.setImageBitmap(BitmapFactory.decodeFile(mThumbIds.get(position)));

                tv.setText(mTextsIds.get(position));
        return convertView;
    }
于 2013-02-05T06:39:41.770 回答
0

这是因为您的适配器正在重用视图。在您的代码中,您只有在convertView为空(被创建)时才能获得控件。


在某些项目 android 开始重用视图(convertView 不再为空)并且您的getView方法没有设置 textview 等之后。


您应该像@Glenn 建议的那样在“if (convertView == null)”方法之外设置内容(textview 等)。

于 2013-02-05T06:59:11.877 回答