Вопрос по android, selecteditem – Как получить выбранный элемент из Gridview с ImageAdapter? (Android)

7

Я использовал ListView, чтобы показать некоторые данные (String), извлеченные из базы данных ... довольно просто, но один из моих коллег решил разместить изображение перед текстом на экране. Мы не смогли сделать это с помощью Listview, но мы нашли некоторый пример с GridView, который выглядел именно так, как нам нужно, затем мы потратили некоторое время на использование GridView и поместили изображение перед текстом.

Теперь, к сожалению, мы не знаем, как получить выбранный элемент (на основе текста, полученного из выбранного элемента)

Я использую OnItemClickListener, а внутри onItemClick - метод gridView.getItemSelectedAtPosition (), но все, что я получаю, является & quot; null & quot ;.

Я не имею сейчас, если ImageAdapter как-то с этим связан, потому что, если я изменю его на ArrayAdapter, я смогу правильно получить нужный элемент, но в этом ряду нет изображения.

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

А что я могу сделать?

EDITED - источник 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;
 }

 }
как я мог, если бы вы не указали источник? Tomasz Gawel
@TomaszGawel единственное, что мы сделали, это установили Adapter gridView.setAdapter (новый ImageAdapter (this, name_array, description_array)); user1419496
но ImageAdapter не является стандартным классом, поэтому предоставьте код класса ImageAdapter, так как я подозреваю, что метод getItem просто возвращает null для вашего случая. Tomasz Gawel
А как выглядит код вашего графического адаптера? Tomasz Gawel
@ TomaszGawel извините, я действительно думал, что это стандартный класс, поскольку не я изменил Listview на Gridview. Я не знаю всего, что было сделано ... кстати, как вы правы, метод возвращает ноль, не так ли? есть идеи, как я могу написать это, чтобы получить мне текст в выбранной строке ??? Спасибо user1419496

Ваш Ответ

1   ответ
7

gridView.getItemAtPosition(position) вызывает адаптерgetItem(int position) под сценой - так реализоватьgetItem в вашемImageAdapter класс для возврата, что позволит вам определить, что выбрано (может быть,mobileValues[position] достаточно или просто то, что вы пишете в textview:mobileValues[position] + "\n" + mobileValuesD[position]).

С другой стороны вonItemClick(AdapterView<?> parent, View v, int position, long id) у вас уже есть позиция выбранного элемента, может быть, достаточно информации? что вы собираетесь делать в этом слушателе?

Я внес некоторые изменения в ваш адаптер:

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;
    }
}
Error: User Rate Limit Exceeded user1419496
Error: User Rate Limit Exceeded

Похожие вопросы