Android 如何从片段中的GridView中的ArrayList中获取字符串?
我正在尝试为gridview设置onclick侦听器。gridview显示文本和图像。单击某个项目时,我希望它从该项目中获取文本,并对照一些if语句进行检查。这是我的班级。由于它是一个片段,而且我对片段还不熟悉,所以我很难理解它。谢谢Android 如何从片段中的GridView中的ArrayList中获取字符串?,android,gridview,android-fragments,Android,Gridview,Android Fragments,我正在尝试为gridview设置onclick侦听器。gridview显示文本和图像。单击某个项目时,我希望它从该项目中获取文本,并对照一些if语句进行检查。这是我的班级。由于它是一个片段,而且我对片段还不熟悉,所以我很难理解它。谢谢 IMPORTS HERE... public class Items extends SherlockFragment { public View onCreateView(LayoutInflater inflater, Vi
IMPORTS HERE...
public class Items extends SherlockFragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.activity_main, container, false);
GridView gridView = (GridView)view.findViewById(R.id.gridview);
gridView.setAdapter(new MyAdapter(getActivity()));
gridView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
if(SOMETHING.equals("Furniture")){
Toast.makeText(getActivity(), "Furny", Toast.LENGTH_SHORT).show();
//THIS IS WHERE I'M STUCK. I DON'T KNOW WHAT TO REPLACE "SOMETHING" WITH
}
}
});
return view;
}
public class MyAdapter extends BaseAdapter
{
private List<Item> items = new ArrayList<Item>();
private LayoutInflater inflater;
public MyAdapter(Context context)
{
inflater = LayoutInflater.from(context);
items.add(new Item("Weapons", R.drawable.BOMB));
items.add(new Item("Tools", R.drawable.TOOL));
items.add(new Item("Furniture", R.drawable.CHAIR));
}
@Override
public int getCount() {
return items.size();
}
@Override
public Object getItem(int i)
{
return items.get(i);
}
@Override
public long getItemId(int i)
{
return items.get(i).drawableId;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup)
{
View v = view;
ImageView picture;
TextView name;
if(v == null)
{
v = inflater.inflate(R.layout.gridview_item, viewGroup, false);
v.setTag(R.id.picture, v.findViewById(R.id.picture));
v.setTag(R.id.text, v.findViewById(R.id.text));
}
picture = (ImageView)v.getTag(R.id.picture);
name = (TextView)v.getTag(R.id.text);
Item item = (Item)getItem(i);
Options options = new BitmapFactory.Options();
options.inDither = false;
options.inScaled = false;
Bitmap source = BitmapFactory.decodeResource(getResources(), item.drawableId, options);
final int maxSize = 120;
int outWidth;
int outHeight;
int inWidth = source.getWidth();
int inHeight = source.getHeight();
if(inWidth > inHeight){
outWidth = maxSize;
outHeight = (inHeight * maxSize) / inWidth;
} else {
outHeight = maxSize;
outWidth = (inWidth * maxSize) / inHeight;
}
Bitmap resizedBitmap = Bitmap.createScaledBitmap(source, outWidth, outHeight, false);
picture.setImageBitmap(resizedBitmap);
name.setText(item.name);
return v;
}
private class Item
{
final String name;
final int drawableId;
Item(String name, int drawableId)
{
this.name = name;
this.drawableId = drawableId;
}
}
}
}
在此处导入。。。
公共类项扩展了SherlockFragment{
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图=充气机。充气(R.layout.activity\u main,容器,错误);
GridView GridView=(GridView)view.findviewbyd(R.id.GridView);
setAdapter(新的MyAdapter(getActivity());
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父视图、视图v、,
内部位置,长id){
如果(某物等于(“家具”)){
Toast.makeText(getActivity(),“Furny”,Toast.LENGTH_SHORT.show();
//这就是我被困的地方。我不知道用什么来代替“某物”
}
}
});
返回视图;
}
公共类MyAdapter扩展了BaseAdapter
{
私有列表项=新的ArrayList();
私人充气机;
公共MyAdapter(上下文)
{
充气器=充气器。从(上下文);
物品。添加(新物品(“武器”,R.drawable.BOMB));
添加(新项目(“工具”,R.drawable.TOOL));
项目。添加(新项目(“家具”,R.可拉拔椅子));
}
@凌驾
public int getCount(){
返回items.size();
}
@凌驾
公共对象getItem(int i)
{
返回项目。获取(i);
}
@凌驾
公共长getItemId(int i)
{
退货项目.get(i).drawableId;
}
@凌驾
公共视图getView(int i、视图视图、视图组视图组)
{
视图v=视图;
图像视图图片;
文本视图名称;
如果(v==null)
{
v=充气机。充气(R.layout.gridview_项,视图组,false);
v、 setTag(R.id.picture,v.findViewById(R.id.picture));
v、 setTag(R.id.text,v.findviewbyd(R.id.text));
}
picture=(ImageView)v.getTag(R.id.picture);
name=(TextView)v.getTag(R.id.text);
Item Item=(Item)getItem(i);
Options=new-BitmapFactory.Options();
options.inDither=false;
options.inScaled=false;
位图源=BitmapFactory.decodeResource(getResources(),item.drawableId,options);
最终int maxSize=120;
外展;
内部高度;
int inWidth=source.getWidth();
int inHeight=source.getHeight();
如果(英寸宽度>英寸高度){
外径=最大尺寸;
外高=(内高*最大尺寸)/内宽;
}否则{
外高=最大尺寸;
外径=(inWidth*maxSize)/inHeight;
}
Bitmap resizedBitmap=Bitmap.createScaledBitmap(源、外宽、外高、假);
picture.setImageBitmap(resizedBitmap);
name.setText(item.name);
返回v;
}
私人类项目
{
最后的字符串名;
最终int可提取ID;
项(字符串名称,int-drawableId)
{
this.name=名称;
this.drawableId=drawableId;
}
}
}
}
使用位置
参数并在该位置获取项目
Item item= (Item) parent.getItemAtPosition(position);
String name = item.name;
您可以将下面的移动到单独的.java
文件中
public class Item
{
String name;
int drawableId;
Item(String name, int drawableId)
{
this.name = name;
this.drawableId = drawableId;
}
}
伟大的非常感谢你!这工作得很好,除了因为我的“Item”类是内部类之外,我必须执行
class.MyAdapter.Item Item=(class.MyAdapter.Item)parent…
@cw1998您可以将该类移动到独立的.java
文件中,如编辑文章中所建议的那样。我把它放在内部,但我想把它移到自己的.java文件中会更容易。但我会同意你的建议!谢谢