【问题标题】:Android gridview OnItemClickListenerAndroid gridview OnItemClickListener
【发布时间】:2014-05-26 16:01:14
【问题描述】:

我成功创建了一个自定义网格视图(带有图像和文本)。现在我想写一个 OnItemClickListener 方法。我可以在 OnItemClickListener 方法上获得位置,但我希望能够点击“朋友”并看到“点击的项目:朋友”

如何获取选择字符串而不是位置? 这是我的源代码

public class Item {
Bitmap image;
String title;

public Item(Bitmap image, String title) {
    super();
    this.image = image;
    this.title = title;
}
public Bitmap getImage() {
    return image;
}
public void setImage(Bitmap image) {
    this.image = image;
}
public String getTitle() {
    return title;
}
public void setTitle(String title) {
    this.title = title;
}



public class CustomGridViewAdapter extends ArrayAdapter<Item> {
Context context;
int layoutResourceId;
ArrayList<Item> data = new ArrayList<Item>();
public static Item item ;

public CustomGridViewAdapter(Context context, int layoutResourceId,
        ArrayList<Item> data) {
    super(context, layoutResourceId, data);
    this.layoutResourceId = layoutResourceId;
    this.context = context;
    this.data = data;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    RecordHolder holder = null;

    if (row == null) {
        LayoutInflater inflater = ((Activity) context).getLayoutInflater();
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new RecordHolder();
        holder.txtTitle = (TextView) row.findViewById(R.id.item_text);
        holder.imageItem = (ImageView) row.findViewById(R.id.item_image);
        row.setTag(holder);
    } else {
        holder = (RecordHolder) row.getTag();
    }

    item= data.get(position);
    holder.txtTitle.setText(item.getTitle());
    holder.imageItem.setImageBitmap(item.getImage());
    return row;

}

public static class RecordHolder {
    public static TextView txtTitle;
    ImageView imageItem;

}

}

public class MainActivity extends Activity {
GridView gridView;
ArrayList<Item> gridArray = new ArrayList<Item>();
CustomGridViewAdapter customGridAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // set grid view item
    Bitmap homeIcon = BitmapFactory.decodeResource(this.getResources(),
            R.drawable.home);
    Bitmap userIcon = BitmapFactory.decodeResource(this.getResources(),
            R.drawable.personal);

    gridArray.add(new Item(homeIcon, "Home"));
    gridArray.add(new Item(userIcon, "User"));
    gridArray.add(new Item(homeIcon, "House"));
    gridArray.add(new Item(userIcon, "Friend"));
    gridArray.add(new Item(homeIcon, "Home"));
    gridArray.add(new Item(userIcon, "Personal"));
    gridArray.add(new Item(homeIcon, "Home"));
    gridArray.add(new Item(userIcon, "User"));
    gridArray.add(new Item(homeIcon, "Building"));
    gridArray.add(new Item(userIcon, "User"));
    gridArray.add(new Item(homeIcon, "Home"));
    gridArray.add(new Item(userIcon, "xyz"));

    gridView = (GridView) findViewById(R.id.gridView1);
    customGridAdapter = new CustomGridViewAdapter(this, R.layout.row_grid,
            gridArray);
    gridView.setAdapter(customGridAdapter);
    gridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(getApplicationContext(),
                    "Item Clicked: " + position, Toast.LENGTH_SHORT).show();

        }
    });
}

}

【问题讨论】:

    标签: android gridview onitemclicklistener


    【解决方案1】:

    改变这个

    Toast.makeText(getApplicationContext(),
                        "Item Clicked: " + position, Toast.LENGTH_SHORT).show();
    

    Toast.makeText(getApplicationContext(),
                            "Item Clicked: " + ((TextView) v.findViewById(R.id.item_text)).getText(), Toast.LENGTH_SHORT).show();
    

    【讨论】:

    • 谢谢,但答案不正确。我更改了此代码,但如果单击主页,则无法显示例如主页:(
    • 我还删除了项目对象中的静态内容,但是当我在 gridview 中单击项目时,我可以显示包名称并喜欢此文本 @556622123
    • 当我在 gridview 中单击项目时,我有这样的结果包名称 Item@5563323
    • 不确定它是否可以工作,但你不能用 .getItem(position).Text 来获取对象的文本而不是对象的字符串表示
    【解决方案2】:

    我知道这个答案来得有点晚,但我刚刚遇到了同样的问题,我通过使用setTag()getTag() 在可点击项目上使用标签解决了这个问题。我只想发布此方法,以防将来对其他人有所帮助。为了使用此方法视图“保存模式”(就像您在上面使用的那样),您只需在“保存”您的数据的对象内的另一个项目上设置标签。

    例如:

    您已经有一个公共RecordHolder 对象和一个公共TextView,因此您可以在此TextView 上设置标签,如下所示:

    holder.txtTitle.setTag("whatever you want")

    然后在您的 OnItemClickListener.onItemClick 方法中,您可以像这样获取标签:

    String tagValue = ((CustomGridViewAdapter.RecordHolder) view.getTag()).txtTitle.getTag().toString();

    tagValue 将是whatever you want(因此您可以根据需要指定视图的名称)。如果您想存储其他数据(如 id 或引用),而不仅仅是获取 TextView 的文本或类似的内容,此方法效果很好。如果您只想要TextView 中的相同文本,那么@Giru 的答案更合适。

    【讨论】:

      猜你喜欢
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多