网格视图项目

时间:2013-02-04 11:11:14

标签: java android xml

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

我希望在不重复任何项目的情况下达到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;
    }

2 个答案:

答案 0 :(得分: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;
    }

答案 1 :(得分:0)

这是因为您的适配器正在重复使用这些视图。并且在您的代码中,只有当 convertView 为null(已创建)时才会获得控件。


在某些项目之后,android开始重用视图(convertView不再为null),而 getView 方法不会设置textview等。


您应该在&#34; if(convertView == null)&#34;之外设置内容(textview等)。像@Glenn建议的方法。