如何知道GridView中的哪个View对象被选中以打开Context Menu

时间:2016-08-01 08:21:35

标签: java android gridview

我正在学习为教育目的构建一个Android应用程序,但我遇到了一个问题,并且想知道是否有人可以提供建议?

我创建了一个网格。网格中的每个方块在首次初始化时都包含占位符图像。当你长按'网格方块,出现上下文菜单。然后,用户应该可以选择从图库中上传图像,图像会调整大小并替换占位符图像,或者他们可以将文本输入到网格方块中,创建TextView对象以替换占位符图像。

我无法弄清楚如何确定从中打开上下文菜单的网格中的哪个View项。我已经给了他们所有标签,但不知道如何访问它,因为View对象没有传入onContextItemSelected方法。

我的GridAdapter中的适当代码在这里:

 private Integer[] ids = {
        android.R.drawable.image, android.R.drawable.image, android.R.drawable.image, android.R.drawable.image, android.R.drawable.image};


public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder;

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {

        convertView = inflater.inflate(R.layout.grid, parent, false);

        holder = new Holder();

        holder.mView = (View) convertView.findViewById(R.id.grid);

        holder.mImageView = (ImageView) convertView.findViewById(R.id.image);

        convertView.setTag(holder);

    } else {

        holder = (Holder) convertView.getTag();
    }

    holder.mImageView.setImageResource(mThumbIds[position]);

    return convertView;
}


public static class Holder {
    View mView;

    ImageView mImageView;
}

}

我的Grid类中的适当代码:

   Gridview gridview = (GridView) findViewById(R.id.gridview);

  registerForContextMenu(gridview);

 public void onCreateContextMenu(ContextMenu menu, View v,
                                ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.uploadmenu, menu);
    }


@Override
public boolean onContextItemSelected(MenuItem item) {

    switch (item.getItemId()) {
        case R.id.group_item1:
         //store image in grid square

我有这种方法来修改GridAdapter类中的图像,但我不知道如何检索单击的网格项的位置和resourceId以打开上下文菜单。

  public void updateImage(int position, int resourceId)
  {
    mThumbIds[position] = resourceId;
    notifyDataSetChanged();
    }

提前感谢任何指导。

1 个答案:

答案 0 :(得分:1)

onCreateContextMenu内使用此段代码,

AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
position = (int) info.id;

这会给你这个位置。将其另存为类属性,并在onContextItemSelected内部使用。