android_king22
android_king22

Reputation: 779

How to create onClickListener for Gallery?

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

Answers (2)

Marqs
Marqs

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

Andro Selva
Andro Selva

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

Related Questions