如何使用ClickableSpan打开另一个新活动

时间:2016-11-05 08:58:34

标签: android textview clickablespan

当用户使用#或@

访问textview时,我想使用startActivity(new Intent(context, MyProfile.class));打开新的活动

这是我的代码

    class CalloutLinkProfile extends ClickableSpan {

    Context context;
    TextPaint textPaint;

    public CalloutLinkProfile(Context ctx) {
        super();
        context = ctx;

    }


    @Override
    public void updateDrawState(TextPaint ds) {
        textPaint = ds;
       // ds.setColor(0xff336699);

        ds.setARGB(255, 30, 144, 255);
        ds.setTypeface(Typeface.DEFAULT_BOLD);
        ds.setUnderlineText(false); // set to false to remove underline
    }

    @Override
    public void onClick(View widget) {
        TextView tv = (TextView) widget;
        Spanned s = (Spanned) tv.getText();
        int start = s.getSpanStart(this);
        int end = s.getSpanEnd(this);
        String theWord = s.subSequence(start + 1, end).toString();
        Toast.makeText(context, String.format("Here's a cool user: %s", theWord), 10).show();
        startActivity(new Intent(context, MyProfile.class));

    }

这是我的完整代码

public class FeedHomeAdapter extends BaseAdapter {
private Context mContext;
private ArrayList<String> id;
private ArrayList<String> puName;
private ArrayList<String> pfName;

private SQLiteDatabase dataBaseall;



public FeedHomeAdapter(Context c, ArrayList<String> id, ArrayList<String> uname,

                       ArrayList<String> sid, ArrayList<String> svideo, ArrayList<String> isfollow, ArrayList<String> ischat) {
    this.mContext = c;

    this.id = id;
    this.puName = uname;

    this.isfollowing = isfollow;
    this.pischat = ischat;

}

public int getCount() {
    // TODO Auto-generated method stub
    return id.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return null;
}

public long getItemId(int position) {

    // TODO Auto-generated method stub
    return position;
}

public ArrayList<int[]> getSpans(String body, char prefix) {
    ArrayList<int[]> spans = new ArrayList<int[]>();

    Pattern pattern = Pattern.compile(prefix + "\\w+");
    Matcher matcher = pattern.matcher(body);

    // Check all occurrences
    while (matcher.find()) {
        int[] currentSpan = new int[2];
        currentSpan[0] = matcher.start();
        currentSpan[1] = matcher.end();
        spans.add(currentSpan);
    }

    return spans;
}

public View getView(final int pos, View child, ViewGroup parent) {
    final Holder mHolder;
    if (child == null) {
        child = LayoutInflater.from(mContext).inflate(R.layout.chat_display_item, parent, false);
        LayoutInflater layoutInflater;
        layoutInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        child = layoutInflater.inflate(R.layout.card_layout, null);

        mHolder = new Holder();
        mHolder.txt_uName = (TextView) child.findViewById(R.id.name);
        mHolder.txt_uName1 = (TextView) child.findViewById(R.id.name1);
        mHolder.txt_fName = (TextView) child.findViewById(R.id.fname);
        mHolder.txt_satus = (TextView) child.findViewById(R.id.note);


        mHolder.comment = (ImageButton) child.findViewById(R.id.replide);

        child.setTag(mHolder);

    } else {
        mHolder = (Holder) child.getTag();
    }
    mHolder.txt_satus.setHighlightColor(Color.WHITE);
    mHolder.txt_satus.setHighlightColor(Color.TRANSPARENT);



    ArrayList<int[]> hashtagSpans = getSpans(psatus.get(pos), '#');
    ArrayList<int[]> calloutSpans = getSpans(psatus.get(pos), '@');

    SpannableString commentsContent =
            new SpannableString(this.psatus.get(pos));

    for (int i = 0; i < hashtagSpans.size(); i++) {
        int[] span = hashtagSpans.get(i);
        int hashTagStart = span[0];
        int hashTagEnd = span[1];

        commentsContent.setSpan(new Hashtag(mContext),
                hashTagStart,
                hashTagEnd, 0);

    }
    for (int i = 0; i < calloutSpans.size(); i++) {
        int[] span = calloutSpans.get(i);
        int calloutStart = span[0];
        int calloutEnd = span[1];

        commentsContent.setSpan(new CalloutLinkProfile(mContext),
                calloutStart,
                calloutEnd, 0);

    }



    mHolder.txt_satus.setMovementMethod(LinkMovementMethod.getInstance());
    mHolder.txt_satus.setText(commentsContent);

    mHolder.txt_linktext.setText(statuslinktext.get(pos));
    mHolder.txt_time.setText(ptime.get(pos));








    return child;
}


public class Holder {
    TextView txt_id;
    TextView txt_satus;
    TextView txt_time;
    TextView txt_uName;
    TextView txt_uName1;

    LinearLayout error_d;
    RelativeLayout profile_view;


}


// to check if app is install
private boolean appInstalledOrNot(String uri) {
    PackageManager pm = mContext.getPackageManager();
    boolean app_installed = false;
    try {
        pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
        app_installed = true;
    } catch (PackageManager.NameNotFoundException e) {
        app_installed = false;
    }
    return app_installed;
}







class CalloutLinkProfile extends ClickableSpan {

    Context context;
    TextPaint textPaint;

    public CalloutLinkProfile(Context ctx) {
        super();
        context = ctx;

    }


    @Override
    public void updateDrawState(TextPaint ds) {
        textPaint = ds;
       // ds.setColor(0xff336699);

        ds.setARGB(255, 30, 144, 255);
        ds.setTypeface(Typeface.DEFAULT_BOLD);
        ds.setUnderlineText(false); // set to false to remove underline
    }

    @Override
    public void onClick(View widget) {
        TextView tv = (TextView) widget;
        Spanned s = (Spanned) tv.getText();
        int start = s.getSpanStart(this);
        int end = s.getSpanEnd(this);
        String theWord = s.subSequence(start + 1, end).toString();
        Toast.makeText(context, String.format("Here's a cool user: %s", theWord), 10).show();
        startActivity(new Intent(context, MyProfile.class));

    }



}

}

1 个答案:

答案 0 :(得分:0)

单击TextView无效?