¿Cómo obtengo el elemento seleccionado de una Gridview con ImageAdapter? (Androide)

Yo había utilizado un ListView para mostrar algunos datos (String) recuperados de la base de datos … bastante simple, pero uno de mis compañeros de trabajo decidió poner una imagen delante del texto en la pantalla. No pudimos hacerlo con ListView, pero encontramos algún ejemplo con GridView que se veía exactamente como necesitamos, luego pasamos un tiempo usando GridView y pusimos la imagen en la parte frontal del texto.

Ahora, desafortunadamente, no sabemos cómo obtener el elemento seleccionado (basado en el texto que viene del elemento seleccionado)

Estoy usando OnItemClickListener, y dentro onItemClick el método gridView.getItemSelectedAtPosition (), pero todo lo que obtengo es "null".

No ahora si ImageAdapter tiene algo que ver con él, cuz si lo cambio a un ArrayAdapter puedo conseguir el artículo derecho correctamente pero no hay imagen en la fila de esta manera.

gridview.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View v, int position, long id{ String selectedItem = (String) (gridView.getItemAtPosicion(position)); //always null } }); 

¿que puedo hacer?

EDITED – Fuente ListView

 import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class ImageAdapter extends BaseAdapter { private Context context; private final String[] mobileValues; private final String[] mobileValuesD; public ImageAdapter(Context context, String[] mobileValues, String[] mobileValuesD) { this.context = context; this.mobileValues = mobileValues; this.mobileValuesD = mobileValuesD; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) context.getSystemService (Context.LAYOUT_INFLATER_SERVICE); View gridView; if (convertView == null) { gridView = new View(context); // get layout from mobile.xml gridView = inflater.inflate(R.layout.pesquisa_2, null); // set value into textview TextView textView = (TextView) gridView.findViewById(R.id.grid_item_label); textView.setText(mobileValues[position]+"\n"+mobileValuesD[position]); // set image based on selected text ImageView imageView = (ImageView) gridView.findViewById(R.id.grid_item_image); String mobile = mobileValues[position]; //SELECT DAS IMAGENS if (mobile.equals("pdt1")) { imageView.setImageResource(R.drawable.img1); } else if (mobile.equals("prd2")) { imageView.setImageResource(R.drawable.feijao); } else { imageView.setImageResource(R.drawable.acucar); } } else { gridView = (View) convertView; } return gridView; } public int getCount() { return mobileValues.length; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } } 

gridView.getItemAtPosition(position) llama al getItem(int position) del adaptador getItem(int position) en la escena – así que implemente getItem en su clase ImageAdapter para devolver algo que le permitirá identificar lo que está seleccionado (quizás mobileValues[position] es suficiente o simplemente lo que escribe En textview: mobileValues[position] + "\n" + mobileValuesD[position] ).

Por otro lado lado en onItemClick(AdapterView<?> parent, View v, int position, long id) usted tiene allready tiene la posición del elemento seleccionado tal vez es suficiente información? ¿Qué vas a hacer en ese oyente?

He puesto algunos cambios en tu adaptador:

 public class ImageAdapter extends BaseAdapter { private final String[] mobileValues; private final String[] mobileValuesD; public ImageAdapter(String[] mobileValues, String[] mobileValuesD) { this.mobileValues = mobileValues; this.mobileValuesD = mobileValuesD; } @Override public View getView(int position, View view, ViewGroup parent) { if (view == null) { view = ViewGroup.inflate( parent.getContext(), R.layout.pesquisa_2, null); } ((TextView) view.findViewById(R.id.grid_item_label)) .setText(getItem(position)); ((ImageView) view.findViewById(R.id.grid_item_image)) .setImageResource(getImageResForPosition(position)); return view; } private int getImageResForPosition(int position) { String mobile = mobileValues[position]; if (mobile.equals("pdt1")) { return R.drawable.img1; } else if (mobile.equals("prd2")) { return R.drawable.feijao; } else { return R.drawable.acucar; } } @Override public int getCount() { return mobileValues.length; } @Override public Object getItem(int position) { return mobileValues[position] + "\n" + mobileValuesD[position]; } @Override public long getItemId(int position) { return position; } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.