我如何得到与ImageAdapter一个GridView选定的项目? (安卓) [英] How do I get the selected item from a Gridview with ImageAdapter? (Android)

查看:146
本文介绍了我如何得到与ImageAdapter一个GridView选定的项目? (安卓)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我曾用一个ListView显示一些数据(字符串)从数据库...相当简单检索,但我cooworkers 1决定把一个图像在屏幕上的文本的前面。我们无法用列表视图做到这一点,但我们发现与GridView的一些例子,看上去完全一样,我们需要那么我们花了一些时间使用的GridView,也把图片中的文字的前面。

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

我使用OnItemClickListener,并在onItemClick方法gridView.getItemSelectedAtPosition(),但一切我得到的是空。

我不知道现在如果ImageAdapter有什么用它做辩论,因为如果我把它改为一个ArrayAdapter我可以适当地得到正确的项目,但有行中没有图像这样的。

  gridview.setOnItemClickListener(新OnItemClickListener(){
   公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,长ID {字符串将selectedItem =(字符串)(gridView.getItemAtPosicion(位置)); //总是空}});
 

我该怎么办?

EDITED - ListView的源

 进口android.content.Context;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;
公共类ImageAdapter扩展了BaseAdapter {
私人上下文的背景下;
私人最终的String [] mobileValues​​;
私人最终的String [] mobileValues​​D;

公共ImageAdapter(上下文的背景下,的String [] mobileValues​​,字符串[] mobileValues​​D){
this.context =背景;
this.mobileValues​​ = mobileValues​​;
this.mobileValues​​D = mobileValues​​D;
}

  公共查看getView(INT位置,查看convertView,ViewGroup中父){
  LayoutInflater充气=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  查看GridView控件;

  如果(convertView == NULL){

  GridView控件=新景(背景);

   //从mobile.xml布局
    GridView控件= inflater.inflate(R.layout.pesquisa_2,NULL);

  //设定值成的TextView
    TextView中的TextView =(TextView中)gridView.findViewById(R.id.grid_item_label);
     textView.setText(mobileValues​​ [位置] +\ N+ mobileValues​​D [位置]);

 //根据选定的文本集图像
  ImageView的ImageView的=(ImageView的)gridView.findViewById(R.id.grid_item_image);

  字符串移动= mobileValues​​ [位置]

 //选择DAS IMAGENS

  如果(mobile.equals(pdt1)){
     imageView.setImageResource(R.drawable.img1);
  }否则,如果(mobile.equals(PRD2)){
      imageView.setImageResource(R.drawable.feijao);
   } 其他 {
       imageView.setImageResource(R.drawable.acucar);
    }


   } 其他 {
    GridView控件=(查看)convertView;
   }

    返回GridView控件;
 }

   公众诠释getCount将(){
        返回mobileValues​​.length;
 }

  公共对象的getItem(INT位置){
      返回null;
 }

   众长getItemId(INT位置){
      返回0;
 }

 }
 

解决方案

gridView.getItemAtPosition(位置)调用适配器的的getItem(INT位置) 下的场景 - 所以实施的getItem ImageAdapter 类返回某事,使你确定选择什么(也许 mobileValues​​ [位置] 就够了,或只是你写入的TextView什么: mobileValues​​ [位置] +\ N + mobileValues​​D [位置] )。

在另一方面侧 onItemClick(适配器视图<>母公司,视图V,INT位置,长ID)你媒体链接有选择项的位置可能它是足够的信息?你即将做的听众?

我已经把一些更改适配器:

 公共类ImageAdapter扩展了BaseAdapter {

    私人最终的String [] mobileValues​​;
    私人最终的String [] mobileValues​​D;

    公共ImageAdapter(字符串[] mobileValues​​,字符串[] mobileValues​​D){
        this.mobileValues​​ = mobileValues​​;
        this.mobileValues​​D = mobileValues​​D;
    }

    @覆盖
    公共查看getView(INT位置,查看convertView,ViewGroup中父){

        最后查看gridItemView = convertView == NULL?
                ViewGroup.inflate(parent.getContext(),R.layout.pesquisa_2,空):convertView;

        ((TextView中)gridItemView.findViewById(
                R.id.grid_item_label))的setText(的getItem(位置))。

        ((ImageView的)gridItemView.findViewById(
                R.id.grid_item_image))。setImageResource(
                        getImageResForPosition(位置));

        返回gridItemView;
    }

    私人诠释getImageResForPosition(INT位置){
        字符串移动= mobileValues​​ [位置]
        如果(mobile.equals(pdt1)){
            返回R.drawable.img1;
        }否则,如果(mobile.equals(PRD2)){
            返回R.drawable.feijao;
        } 其他 {
            返回R.drawable.acucar;
        }
        返回0;
    }

    @覆盖
    公众诠释getCount将(){
        返回mobileValues​​.length;
    }

    @覆盖
    公共对象的getItem(INT位置){
        返回mobileValues​​ [位置] +\ N
                + mobileValues​​D [位置]
    }

    @覆盖
    众长getItemId(INT位置){
        返回的位置;
    }
}
 

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)

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

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     } });

what can I do?

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]+"\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) 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] + "\n" + mobileValuesD[position]).

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 convertView, ViewGroup parent) {

        final View gridItemView = convertView == null ? 
                ViewGroup.inflate(parent.getContext(), R.layout.pesquisa_2, null) : convertView;

        ((TextView) gridItemView.findViewById(
                R.id.grid_item_label)).setText(getItem(position));

        ((ImageView) gridItemView.findViewById(
                R.id.grid_item_image)).setImageResource(
                        getImageResForPosition(position));

        return gridItemView;
    }

    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;
        }
        return 0;
    }

    @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;
    }
}

这篇关于我如何得到与ImageAdapter一个GridView选定的项目? (安卓)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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