2012-01-25 12 views
5

GridView'ı bir ImageView ve her hücrenin içinde bir TextView ile kullanmaya çalışıyorum. Bu yüzden, hücre düzenini, ızgara düzenini, imageAdapter'i ve ana etkinliği oluşturdum, ancak şu soruna erişiyorum:GridView kullanarak ImageViews ve TextViews kullanarak sorun

Bunu emülatörde denediğimde, ilk görüntüler ve başlıklar doğru şekilde gösteriliyor ancak aşağıya iner inmez, bazı öğeler dağınıklaşmaya başlar ve değişmeye devam eder ve hatta birkaç kez çoğalır.

2 paralel dizi kullanıyorum (resim ve resim yazısı). GetView çağrıldığında hangi indekslerin ve görüntülerin gösterildiğini öğrenmek için Log.v işlevini kullanmayı denedim, ancak yalnızca (kaymadan görülebilen) doğru olanları atandı.

Bu sorunu, görünümü tekrar tekrar oluşturarak çözmem gerekiyor ama bu kesinlikle doğru yol değil. İşte

kullanıyorum dosyalar şunlardır:

Izgara Hücre:

<?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> 

GridView:

<?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: (sadece uygulanan yöntem)

@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; 
    } 

} 

Bu benim ilk sorum, eğer herhangi bir hata yaparsam lütfen bana söyleyin. Şimdiden teşekkürler.

cevap

4

Hata, Bağdaştırıcınızın getView'inizde olduğunu düşünüyorum. ConvertView, findViewById() yoluyla erişilen kaynaklarınıza ve sadece şişirilmiş görünüme sahip olmayacaktır. Böyle bir değere ayarladıktan deneyin:

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; 

} hile yaptı

+0

. Çok teşekkürler. –

+0

sorun değil. Olur ve kabul ederse senin için kabul et. – SeanPONeil

+0

Cannot, 15 itibarı gerektirir. Üzgünüm. –

İlgili konular