Reputation: 779
How to register a click for a image in a gallery?
For Example. When a image is clicked a url opens up
EDIT: Errors i get when using the method below.
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.widget.AdapterView.performItemClick(AdapterView.java:282)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.widget.Gallery.onSingleTapUp(Gallery.java:867)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.GestureDetector.onTouchEvent(GestureDetector.java:557)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.widget.Gallery.onTouchEvent(Gallery.java:842)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.View.dispatchTouchEvent(View.java:4600)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1488)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1256)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1700)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1270)
08-05 13:40:38.875: ERROR/AndroidRuntime(690): at android.app.Activity.dispatchTouchEvent(Activity.java:2277)
EDIT: Here i am retreiving the images from a text document url.
public void getImages() throws IOException{
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpGet httppost = new HttpGet("https://example.com/webImages.txt");
HttpResponse response;
response = httpclient.execute(httppost);
HttpEntity ht = response.getEntity();
BufferedHttpEntity buf = new BufferedHttpEntity(ht);
InputStream is = buf.getContent();
BufferedReader r = new BufferedReader(new InputStreamReader(is), 8);
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line + "\n");
Log.v("getImage1", "Retreived image");
imageUrl = total.toString();
}
}
Since the URL is retrieved from the TEXT doc how will i change the setTag every time the URL is changed inside the text document for the images to be retreived?
Upvotes: 0
Views: 3792
Reputation: 17910
Simply use getItemAtPosition() to get the clicked object:
You can find some more info here:
http://developer.android.com/resources/tutorials/views/hello-gallery.html
Edited:
Assign the URL inside getView() in your ImageAdapter:
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
private Integer[] mImageIds = {
R.drawable.sample_1,
R.drawable.sample_2
};
private String[] mImageURLs = {
"http://www.example1.com",
"http://www.example2.com"
};
public ImageAdapter(Context c) {
mContext = c;
TypedArray attr = mContext.obtainStyledAttributes(R.styleable.HelloGallery);
mGalleryItemBackground = attr.getResourceId(
R.styleable.HelloGallery_android_galleryItemBackground, 0);
attr.recycle();
}
public int getCount() {
return mImageIds.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(mContext);
imageView.setImageResource(mImageIds[position]);
//Add url
imageView.setTag(mImageURLs[position]);
imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
imageView.setBackgroundResource(mGalleryItemBackground);
return imageView;
}
}
And then read that urs inside OnItemClick():
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String url = view.getTag().toString();
//next use this url to open in a browser
}
});
Upvotes: 3
Reputation: 54322
Try this
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Log.i("Click event","In gallery"+arg2); //arg2 provides the image position
wv = (WebView) findViewById(R.id.webview);
wv.loadUrl(url);
});
Upvotes: 3