Custom adapter distinguir click en enlace

Z

Tengo un adapter que deriva de una clave de Twitter-fabric le sobreescribe el OnClickListener siguiendo un ejemplo y funciona ,pero cuando un tweet contiene un enlace y haces click sobre el salta el onclickListener del adapter y no se abre en enlace ¿Habria alguna manera de que distinga el click sobre el enlace para que lo abra?

import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;

import com.twitter.sdk.android.core.models.Tweet;
import com.twitter.sdk.android.tweetui.Timeline;
import com.twitter.sdk.android.tweetui.TweetTimelineListAdapter;

/**
 * Created by alvaro on 13/06/16.
 */
public class CustomTweetTimelineListAdapter extends TweetTimelineListAdapter implements Adapter{

    private Context context;
    /**
     * Constructs a TweetTimelineListAdapter for the given Tweet Timeline.
     *
     * @param context  the context for row views.
     * @param timeline a Timeline<Tweet> providing access to Tweet data items.
     * @throws IllegalArgumentException if timeline is null
     */
    public CustomTweetTimelineListAdapter(Context context, Timeline<Tweet> timeline) {
        super(context, timeline);
        this.context = context;
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);

        //disable subviews
        if(view instanceof ViewGroup){
            disableViewAndSubViews((ViewGroup) view);
        }

        //enable root view and attach custom listener
        view.setEnabled(true);
        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Long tweetId = getItemId(position);
                Intent intent = new Intent(context,TweetActivity.class);
                intent.putExtra("TWEET_ID", tweetId);
                context.startActivity(intent);
            }
        });
        return view;
    }
    private void disableViewAndSubViews(ViewGroup layout) {
        layout.setEnabled(false);
        for (int i = 0; i < layout.getChildCount(); i++) {
            View child = layout.getChildAt(i);
            if (child instanceof ViewGroup) {
                disableViewAndSubViews((ViewGroup) child);
            } else {
                child.setEnabled(false);
                child.setClickable(false);
                child.setLongClickable(false);
            }
        }
    }
}
B

Si utilizas una expression regular para detectar urls en tu texto y luego creas un intent para abrir urls en el browser te deberia funcionar no?

Lecherito

Si tienes que poder clicar tanto el padre como los hijos las vas a pasar putas para hacerlo si solo son los hijos pon el clickable a false del padre.

Para hacerlo supongo que haciendo un loop sobre los hijos y pasándoles el evento si es el que quieres y si se ha consumido el evento no seguir con lo que haga el padre. De todsa maneras estás haciendo el child.setClickable(false) como quieres que se abra? xd

1 respuesta
Z

#3
La verdad es que es un ejemplo que vi por ahí ,en realidad soy nuevo en lo de trastear con vistas

1 respuesta
Lecherito

#4 Pues sigue copiando sin pensar tete

1 respuesta
Z

#5 Vale ,fallo mio.
Estoy intentando que quede igual que la aplicacion e twitter ,es decir si el texto no es un enlace abre la vista individual del tweet . he modificado el método disableViewAndSubViews

private void disableViewAndSubViews(ViewGroup layout) {
        layout.setEnabled(true);
        for (int i = 0; i < layout.getChildCount(); i++) {
            View child = layout.getChildAt(i);

        if (child instanceof ViewGroup) {
            disableViewAndSubViews((ViewGroup) child);
        }else if(child instanceof TextView){
            child.setEnabled(false);
            child.setClickable(false);
            child.setLongClickable(false);
        }
        else {
            child.setEnabled(true);
            child.setClickable(true);
            child.setLongClickable(true);
        }
    }
}

Pero lo que me ocurre es que al hacer click en el texto(incluido los enlaces) abre la vista individual,se podría distinguir entre texto normal y un enlace?

1 respuesta
Tig

#6 Para los links dentro de un textview, mira la clase Linkify, en concreto Linkify.addLinks(TextView, mask). Por ejemplo

      Linkify.addLinks(child, Linkify.ALL);