use*_*496 7 android gridview selecteditem
我使用ListView来显示从数据库中检索到的一些数据(String)......非常简单,但我的一个cooworkers决定在屏幕上的文本前放置一个图像.我们无法用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 } });
Run Code Online (Sandbox Code Playgroud)
我能做什么?
已编辑 - 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;
}
}
Run Code Online (Sandbox Code Playgroud)
gridView.getItemAtPosition(position)getItem(int position)在场景中调用适配器- 所以getItem在你的ImageAdapter类中实现返回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;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21077 次 |
| 最近记录: |