Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android WebView inside ListView onclick event issues

I have a ListView where each row has two webviews side by side, taking up the entire row. I've set up onListItemClick() in my ListActivity, but they are not fired when I tap on one of the rows (unless the place I happen to tap is outside the webview's border - but this isn't likely behavior, users would most likely want to tap on the image inside the webview).

I've tried setting setFocusable(false) and setFocusableInTouchMode(false), but those don't help.

Ideally this would operate exactly like Facebook's newsfeed, where you can tap on the profile picture of someone's wall post and it acts as if you've tapped the entire row (in FBs case the text for the wall post)

like image 311
Nelson Monterroso Avatar asked Feb 11 '11 19:02

Nelson Monterroso


1 Answers

Figured it out, posting my solution in case someone else wants to do something similar:

I had to use an OnTouchListener, since OnClick and OnFocus weren't working. I extended a class that is reuseable:

private class WebViewClickListener implements View.OnTouchListener {
    private int position;
    private ViewGroup vg;
    private WebView wv;

    public WebViewClickListener(WebView wv, ViewGroup vg, int position) {
        this.vg = vg;
        this.position = position;
        this.wv = wv;
    }

    public boolean onTouch(View v, MotionEvent event) {
        int action = event.getAction();

        switch (action) {
            case MotionEvent.ACTION_CANCEL:
                return true;
            case MotionEvent.ACTION_UP:
                sendClick();
                return true;
        }

        return false;
    }

    public void sendClick() {
        ListView lv = (ListView) vg;
        lv.performItemClick(wv, position, 0);
    }
}

The sendClick method could be overridden to do what's needed in your specific case. Use case:

WebView image = (WebView) findViewById(R.id.myImage);
image.setOnTouchListener(new WebViewClickListener(image, parent, position));
like image 87
Nelson Monterroso Avatar answered Oct 11 '22 01:10

Nelson Monterroso