Come posso get l'elemento selezionato da un Gridview con ImageAdapter? (Android)

Avevo usato un ListView per mostrare alcuni dati (String) recuperati dal database … abbastanza semplice, ma uno dei miei colleghi ha deciso di mettere un'image di fronte al text sullo schermo. Non siamo stati in grado di farlo con Listview, ma abbiamo trovato qualche esempio con GridView che sembrava esattamente come abbiamo bisogno quindi abbiamo passato un po 'di tempo utilizzando GridView e abbiamo messo l'image nella parte anteriore del text.

Adesso, purtroppo non sappiamo come get l'elemento selezionato (basato sul text che viene dall'elemento selezionato)

  • Come sincronizzare il rotolo di due CoordinatorLayout + AppBarLayout
  • Il contenuto di TextView si perde dopo la modifica dell'orientamento dello schermo
  • Personalizzazione di NavigationView - Aggiunta di headerView dinamico, Libreria di progettazione di supporto per Android
  • NotificationCompat non può essere risolto a un tipo
  • Cordova build: Installare Android Target: "android-22". Non voglio android-22. Voglio android-19 - cosa faccio?
  • Live Wallpaper e background esteso
  • Sto utilizzando OnItemClickListener e in onItemClick il metodo gridView.getItemSelectedAtPosition (), ma tutto quello che ottengo è "null".

    Non faccio ora se ImageAdapter abbia qualcosa a che fare con esso, cuz se lo cambio ad un ArrayAdapter posso get la voce giusta correttamente, ma non c'è alcuna image nella row in questo modo.

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

    cosa posso fare?

    EDITED – sorgente 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; } } 

  • Scarsa performance di app javafx ported
  • Suono più basso o sbiadito in android
  • Orientamento zxing di Android: ResultMetaData è nullo, ottieni la rotazione / orientamento
  • Misura della width del text da disegnare su Tela (Android)
  • RecyclerView: come cancellare le viste memorizzate nella cache / riciclata?
  • Come posso accedere alla playlist creata da un'applicazione musicale predefinita android e call l'app per la musica per riprodurla?
  • One Solution collect form web for “Come posso get l'elemento selezionato da un Gridview con ImageAdapter? (Android)”

    gridView.getItemAtPosition(position) chiama la getItem(int position) dell'adattatore sotto la scena – in modo da implementare getItem nella class ImageAdapter per restituire lo sth che ti permetterà di identificare ciò che è selezionato (forse è sufficiente il valore di mobileValues[position] o semplicemente quello che scrivi nella visualizzazione di text: mobileValues[position] + "\n" + mobileValuesD[position] ).

    Dall'altra parte in onItemClick(AdapterView<?> parent, View v, int position, long id) hai già la posizione dell'elemento selezionato forse è sufficiente informazioni? cosa stai per fare in quel ascoltatore?

    Ho apportto alcune modifiche all'adattatore:

     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; } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.