2012-01-25 18 views
5

के साथ ग्रिड व्यू का उपयोग करने का समस्या मैं एक छवि दृश्य के साथ एक ग्रिड व्यू और प्रत्येक सेल के अंदर एक टेक्स्ट व्यू का उपयोग करने की कोशिश कर रहा हूं। तो मैंने सेल लेआउट, ग्रिड लेआउट, इमेज एडाप्टर और मुख्य गतिविधि, निश्चित रूप से बनाई है, लेकिन मुझे निम्न समस्या मिल रही है:ImageViews और TextViews

जब मैं एमुलेटर पर कोशिश करता हूं, प्रारंभिक छवियों और कैप्शन सही ढंग से दिखाए जाते हैं लेकिन जैसे ही मैं नीचे स्क्रॉल करता हूं, कुछ आइटम गड़बड़ करना शुरू करते हैं और बदलते रहते हैं और कुछ बार डुप्लिकेट करते रहते हैं।

मैं 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> 

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: (केवल कार्यान्वित विधि)

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

छवि एडाप्टर:

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

} 

यह मेरा पहला सवाल है इसलिए यदि मैंने कोई गलती की है, तो कृपया मुझे बताएं। अग्रिम में धन्यवाद।

उत्तर

4

मुझे लगता है कि त्रुटि आपके एडाप्टर के आपके getView में है। ConvertView findViewById() और whatnot, केवल फुलाए गए दृश्य के माध्यम से आपके संसाधनों तक नहीं पहुंच पाएगा। कुछ करने के लिए इसे इस तरह बदलने का प्रयास करें:

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; 

}

+0

कि चाल किया था। बहुत बहुत धन्यवाद। –

+0

कोई समस्या नहीं है। अगर यह आपके लिए काम करता है तो इसे ऊपर उठाएं और स्वीकार करें। – SeanPONeil

+0

ऊपर नहीं जा सकता, 15 प्रतिष्ठा की आवश्यकता है। मुझे माफ कर दो। –