Проблема с использованием GridView с ImageViews и TextViews

Я пытаюсь использовать GridView с ImageView и TextView внутри каждой ячейки. Поэтому я создал макет ячейки, макет сетки, образный адаптер и основное действие, конечно, но я продолжаю получать следующую проблему:

Когда я пытаюсь это сделать на эмуляторе, исходные изображения и титры отображаются правильно, но как только я прокручиваю вниз, некоторые элементы начинают испортиться и продолжают меняться и даже дублировать несколько раз.

Я использую 2 параллельных массива (изображения и подпись). Я попытался использовать функцию Log.v, чтобы узнать, какие индексы и изображения показывались при вызове getView, но только исходные (которые можно видеть без прокрутки) назначаются правильно.

Я должен решить проблему, создавая представление снова и снова, но это, очевидно, не так.

Вот файлы, которые я использую:

Сетевая ячейка:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/GridItem" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center_horizontal"> <ImageView android:id="@+id/grid_item_image" android:layout_width="wrap_content" android:layout_height="wrap_content"> </ImageView> <TextView android:id="@+id/grid_item_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" android:gravity="center_horizontal" android:textColor="#FFFFFF"> </TextView> </LinearLayout> 

Вид сетки:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:textAppearance="?android:attr/textAppearanceMedium" android:gravity="center_vertical" android:text="@string/txtMenu" /> <GridView android:id="@+id/grdMenu" android:layout_width="match_parent" android:layout_height="fill_parent" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:layout_marginTop="50dp" android:gravity="center" android:padding="10dp" android:horizontalSpacing="10dp" android:verticalSpacing="10dp" android:numColumns="3" > </GridView> </RelativeLayout> 

GridActivity: (Единственный реализованный метод)

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.menu); GridView gridview = (GridView) findViewById(R.id.grdMenu); gridview.setAdapter(new ImageAdapter(this)); gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(getApplicationContext(), "" + position, Toast.LENGTH_SHORT).show(); } }); } 

ImageAdapter:

 public class ImageAdapter extends BaseAdapter { private Context mContext; private Integer[] mThumbIds = {R.drawable.potencia32x32,R.drawable.detalle_cuenta32x32,R.drawable.solicitud32x32,R.drawable.agregar32x32,R.drawable.cyr_32x32, R.drawable.usuarios,R.drawable.cambio_med64x64,R.drawable.cobranza_ex64x64,R.drawable.convenio_pagos64x64,R.drawable.copiabf64x64, R.drawable.info_cliente64x64,R.drawable.mant_exp64x64,R.drawable.ordenes64x64,R.drawable.reembolsos64x64,R.drawable.seguro64x64,R.drawable.solicitudes64x64, R.drawable.suministro64x64 }; private String[] Caption = {"Consumo","Facturaciones","Solicitudes","Pagos","Cortes y Rcnx","Datos Generales","Cambios de Medidores","Cobranza Externa","Convenio Pagos","Copia Fac. o Bol.", "Info. Cliente","Mant. Expediente","Consulta Ordenes","Historia Reembolsos","Seguros","Solicitudes","Caracteristicas Suministro" }; public ImageAdapter(Context c) { mContext = c; } public int getCount() { return mThumbIds.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { View myView = null; if(convertView==null) { LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); myView = li.inflate(R.layout.grdmenu_cell, null); TextView tv = (TextView) myView.findViewById(R.id.grid_item_text); Log.v("D:<",String.valueOf(Caption.length) +" y: "+ String.valueOf(position)); tv.setText(Caption[position]); ImageView iv = (ImageView) myView.findViewById(R.id.grid_item_image); Log.v("D:<",String.valueOf(mThumbIds.length) +" y: "+ String.valueOf(position)); iv.setImageResource(mThumbIds[position]); } else { myView = convertView; } return myView; } } 

Это мой первый вопрос, поэтому, если я совершу ошибки, скажите, пожалуйста. Заранее спасибо.

Я думаю, что ошибка в вашем getView вашего адаптера. ConvertView не будет поддерживать доступ к вашим ресурсам через findViewById () и еще что-то, только завышенное представление. Попробуйте изменить его на следующее:

 public View getView(int position, View convertView, ViewGroup parent) { View myView = null; if(convertView==null) { LayoutInflater li = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); myView = li.inflate(R.layout.grdmenu_cell, null); }else{ myView = convertView; } TextView tv = (TextView) myView.findViewById(R.id.grid_item_text); Log.v("D:<",String.valueOf(Caption.length) +" y: "+ String.valueOf(position)); tv.setText(Caption[position]); ImageView iv = (ImageView) myView.findViewById(R.id.grid_item_image); Log.v("D:<",String.valueOf(mThumbIds.length) +" y: "+ String.valueOf(position)); iv.setImageResource(mThumbIds[position]); return myView; 

}

Intereting Posts
RealmSearchAdapter не перехватывает представление Java.lang.NullPointerException: попытка получить длину нулевого массива Android.view.InflateException: двоичная строка XML-файла # 28: ошибка раздувания фрагмента класса Предупреждение о нарушении политики разработчика Google Play: требуется действие Инструмент отладки weinre не работает в приложении chrome cordova (cca) для android Как получить статус загрузки? Ошибка NDK-сборки NDK Как создать boost для android в качестве общей библиотеки с поддержкой c ++ 11 Правильный способ обработки муравей для библиотеки Android. Строка исключает R.class из файла jar Управление двигателем с помощью устройства Android GREF увеличивается / уменьшается в многопоточном сервисе (helpl) – что это значит? Android Gallery на Android 4.4 (KitKat) возвращает другой URI для Intent.ACTION_GET_CONTENT Разделить ActionBar в два раза больше значков Как получить таймер с высоким разрешением в собственном коде Android? Android AlertDialog с закругленными углами