如何使用 ImageAdapter 从 Gridview 获取所选项目?(安卓) [英] How do I get the selected item from a Gridview with ImageAdapter? (Android)

查看:19
本文介绍了如何使用 ImageAdapter 从 Gridview 获取所选项目?(安卓)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I had used a ListView to show some data (String) retrieved from the database...quite simple, but one of my cooworkers decided to put an image in front of the text in the screen. We were not able to do it with Listview, but we found some example with GridView that looked exactly as we need then we spent some time using GridView and did put the image in the front of the text.

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

Now, unfortunately we don't know how to get the selected item (based on the Text that comes from the item selected)

我正在使用 OnItemClickListener,在 onItemClick 方法 gridView.getItemSelectedAtPosition() 中,但我得到的一切都是空".

I'm using OnItemClickListener, and within onItemClick the method gridView.getItemSelectedAtPosition(), but everything i get is "null".

如果 ImageAdapter 与它有关,我现在不知道,因为如果我将其更改为 ArrayAdapter,我可以正确地获得正确的项目,但以这种方式行中没有图像.

I don't now if ImageAdapter has something to do with it, cuz if I change it to an ArrayAdapter I can get the right item properly but there is no image in the row in this way.

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

我能做什么?

已编辑 - ListView 源

EDITED - ListView source

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]+"
"+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 以返回某物,这将允许您识别选择的内容(也许 mobileValues[position] 就足够了,或者只是什么你写入文本视图:mobileValues[position] + " " + mobileValuesD[position]).

gridView.getItemAtPosition(position) calls the adapter's getItem(int position) under the scene - so implement getItem in your ImageAdapter class to return sth that will allow you to identify what is selected (maybe mobileValues[position] is enough or just what you write into textview: mobileValues[position] + " " + mobileValuesD[position]).

另一方面在onItemClick(AdapterView<?> parent, View v, int position, long id) 中你已经有被选中的item的位置了,也许信息就足够了?你打算在那个监听器中做什么?

On the other hand side in onItemClick(AdapterView<?> parent, View v, int position, long id) you have allready have the position of selected item maybe it is enough information? what you are about to do in that listener?

我对您的适配器进行了一些更改:

I have put some changes to your adapter:

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] + "
" + mobileValuesD[position];
    }

    @Override
    public long getItemId(int position) {
        return position;
    }
}

这篇关于如何使用 ImageAdapter 从 Gridview 获取所选项目?(安卓)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆