在Android中的GridView中创建可单击的图像

Tai*_*red 11 java android clickable-image android-gridview

我在本教程中将图像显示在GridView中.我希望能够点击单个图像并执行其他事件,我需要知道点击了什么图像.

我是否必须在ImageAdapter类中添加imageView.onKeyDown(keyCode,event)?这是当前存在的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
  ImageView imageView;
  if (convertView == null) {  
    // if it's not recycled, initialize some attributes
    imageView = new ImageView(mContext);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);
    //does this need imageView.onKeyDown(keyCode, event)?
  } 
  else {
    imageView = (ImageView) convertView;
  }

  imageView.setImageResource(mThumbIds[position]);
  return imageView;
}
Run Code Online (Sandbox Code Playgroud)

它将如何显示点击的图像?如何创建正确的处理程序?

Ale*_*cua 25

对于GridView,您可以使用setOnItemClickListener方法来拥有OnItemClickListener侦听器.该侦听器将为您提供一个必须使用签名覆盖的方法

onItemClick(AdapterView<?> parent, View v, int position, long id)
Run Code Online (Sandbox Code Playgroud)

在哪里可以获得单击的网格中项目的位置以及网格单元格内的视图.这就是你需要的吗?


Tai*_*red 6

通过使位置最终并向imageView添加onClick侦听器,我能够获得所点击图像的位置.这会记录所单击图像的位置.

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
  ImageView imageView;
  if (convertView == null) {  
    // if it's not recycled, initialize some attributes
    imageView = new ImageView(mContext);
    imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
    imageView.setPadding(8, 8, 8, 8);


    imageView.setOnClickListener(new View.OnClickListener() {

      @Override
      public void onClick(View view) {
        Log.d("onClick","position ["+position+"]");
      }

    });

  } 
  else {
    imageView = (ImageView) convertView;
  }

  imageView.setImageResource(mThumbIds[position]);
  return imageView;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不是你想要做的事情.而是使用Alejandros方法.它更干净,不涉及您更改方法签名. (3认同)

Jia*_*ong 6

我尝试了上面提到的方法getView(final int position ...)意识到位置在28个项目之后得到"重置",并且在gridview中第28个项目之后回到0的位置.

我怀疑最后一个关键字是在创建问题,在删除它之后,我能够按预期获得这​​些位置.

下面是一个示例代码,在展示gridview的活动中调用click事件.

public class MainActivity extends Activity {

ArrayList<Integer> item_ids = new ArrayList<Integer>();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    item_ids = //get your item ids method

    GridView gridview = (GridView) findViewById(R.id.grid_featured);
    gridview.setAdapter(new ImageAdapter(this));
    gridview.setOnItemClickListener(itemClickListener);

    footer = (Footer)findViewById(R.id.layoutFooter);
    footer.setActivity(this);
}

private OnItemClickListener itemClickListener = new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    Log.d(TAG,"Position Clicked ["+position+"] with item id ["+item_ids.get(position)+"]");
    }
};
Run Code Online (Sandbox Code Playgroud)

}