2012-05-26 91 views
6

我曾使用ListView显示从数据库中检索的一些数据(字符串)...很简单,但我的一个cooworkers决定将图像放在屏幕上的文本前面。我们无法使用ListView做到这一点,但我们发现了一些GridView的例子,看起来和我们需要的完全一样,然后我们花了一些时间使用GridView,并将图像放在文本的前面。如何使用ImageAdapter从Gridview中获取所选项目? (Android)

现在,不幸的是,我们不知道如何选择的项目(基于从选择的产品随附的文本)

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

我现在不是如果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  } }); 

我该怎么办?

编辑 - 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; 
} 

} 
+0

,以及您的图像适配器的代码看起来像? –

+0

@TomaszGawel我们做的唯一的事情就是设置适配器gridView.setAdapter(new ImageAdapter(this,name_array,description_array)); – user1419496

+0

但ImageAdapter不是标准类,因此提供了ImageAdapter类的代码,因为我怀疑它的getItem方法只是为您的情况返回null。 –

回答

7

gridView.getItemAtPosition(position)调用适配器的getItem(int position)场景下 - 这样实现getItemImageAdapter类返回某事,让你识别选择什么(也许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; 
    } 
} 
+0

非常感谢Tomasz Gawel!现在一切都运行完美! – user1419496

+0

如何在单击项目时通过recylerview getItemAtPosition(位置)获取类数据。 –

相关问题