如何使用图像适配器从网格视图中获取所选项?(安卓)



我使用列表视图来显示从数据库中检索到的一些数据(字符串)...很简单,但我的一位同事决定在屏幕的文本前面放一张图片。我们无法用Listview做到这一点,但我们找到了一些GridView的例子,看起来完全符合我们的需要,然后我们花了一些时间使用GridView,并将图像放在文本的前面。

现在,不幸的是,我们不知道如何获取所选项目(基于来自所选项目的文本)

我正在使用OnItemClickListener,并且在onItemClick方法gridView.getItemSelectedAtPosition(),但我得到的所有内容都是"null"。

我现在不知道 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     } });

我能做什么?

已编辑 - 列表视图源

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)

场景下调用适配器的getItem(int position) - 因此在ImageAdapter类中实现getItem以返回 sth,这将允许您识别所选内容(也许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;
    }
}

最新更新