0

アプリケーションで使用GridViewしています。列数を 2 に設定すると正しく動作しますが、グリッド内のアイテム数が 8 アイテムを超えると、最初のアイテムが繰り返されます。

アイテムを繰り返さずに14アイテムに到達したい。ありがとう!

ここに私のグリッドビュー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) を繰り返します...etc][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が null (作成される)の場合にのみコントロールを取得します。


いくつかの項目の後、android はビューの再利用を開始し (convertView はもう null ではありません) 、 getViewメソッドは textview などを設定しません。


@Glennが提案したように、「if (convertView == null)」メソッドの外側にコンテンツ(textviewなど)を設定する必要があります。

于 2013-02-05T06:59:11.877 に答える