2016-11-10 9 views
1

グリッドビューに最大5個の画像が表示されているフラグメントがあります。 OnClickListenerは、グリッド内の最初の画像に対して起動されませんが、グリッド内の他の画像をクリックすると機能します。グリッドの最初の画像をクリックするとAndroid OnClickListenerが起動しない

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     imageView = new ImageView(_activity); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    String imageURLs = _filePaths.get(position).toString(); 
    Picasso.with(this._activity).load(imageURLs).placeholder(R.mipmap.ic_launcher).into(imageView); 

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, 
      imageWidth)); 

    imageView.setOnClickListener(new OnImageClickListener(position)); 

    return imageView; 
} 

class OnImageClickListener implements OnClickListener { 

    int _postion; 

    // constructor 
    public OnImageClickListener(int position) { 
     this._postion = position; 
    } 

    @Override 
    public void onClick(View v) { 
     Intent i = new Intent(_activity, FullScreenViewActivity.class); 
     i.putExtra("position", _postion); 
     i.putExtra("PATHS", _filePaths); 
     _activity.startActivity(i); 
    } 

} 

答えて

0

あなたはgetView()方法でImageViewのタグとして位置を設定し、onClick()方法でそのタグ(位置)を取得することによって、これを試してみてください。

public View getView(int position, View convertView, ViewGroup parent) { 
    ImageView imageView; 
    if (convertView == null) { 
     imageView = new ImageView(_activity); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    String imageURLs = _filePaths.get(position).toString(); 
    Picasso.with(this._activity).load(imageURLs).placeholder(R.mipmap.ic_launcher).into(imageView); 

    imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); 
    imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, 
      imageWidth)); 

    imageView.setTag(position); 
    imageView.setOnClickListener(this); 

    return imageView; 
} 

    @Override 
public void onClick(View v) { 
    Intent i = new Intent(_activity, FullScreenViewActivity.class); 
    i.putExtra("position", v.getTag()+""); 
    i.putExtra("PATHS", _filePaths); 
    _activity.startActivity(i); 
    } 

} 

はまた、GridViewの代わりのImageViewのに直接OnItemClick取り付けることで解決したView.OnClickListener

+0

グリッドの最初の画像をクリックしてもonClickは起動しません。 – dacscan3669

0

問題を実装することを忘れないでください。

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
      Intent i = new Intent(view.getContext(), FullScreenViewActivity.class); 
      i.putExtra("position", position); 
      i.putExtra("PATHS", imagePaths); 
      view.getContext().startActivity(i); 
     } 
    }); 
関連する問題