Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
673 views
in Technique[技术] by (71.8m points)

android - How to make ListItem Textview to work as Twitter Tweets and get Different Linkify clicks?

For Eg :

Follow @SoccerBible, RT this & if Ronaldo scores https://bit.ly/133/com tonight we'll give away a pair of Nike Clash Vapor 8's to one lucky winner! #RonaldoComp

In my listview component. Where i am showing list of tweets. I have colored the @,# and urls in the tweet text. The all are dynamically clickable.

My question is how can i make the non-colored text as clickable. I have used Linkify.addLinks and Pattern API to make them clickable. But i wanted the non @,# and url text to be clicakble without adding any color to it.

Thanks, dominic

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

For twitter app, I had also the same requirement to click on handles of tweets and also click on the text of tweet to get Tweet detail.

For that I have used this LinkEnabledTextView and that become easy for me to do the task.

I just added the class in my project and then in List Item instead simple TextView I used object/instance of the LinkEnabledTextView.

There is a complete demo in above link, Please check that.

EDIT: Adapter Code Specially check onTextLinkClick() and then holder.twtdata.setOnClickListener()

    private static class EfficientAdapter extends BaseAdapter implements TextLinkClickListener {
        private LayoutInflater mInflater;
        static int pos =0;
        public EfficientAdapter(Context context) {
            mInflater = LayoutInflater.from(context);
        }

        public int getCount() {
            return timelines.length;
        }

        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        public View getView(final int position, View convertView,
                ViewGroup parent) {

            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.listtimerow, null);
                holder = new ViewHolder();
                holder.twtdata = (LinkEnabledTextView) convertView
                        .findViewById(R.id.twtdata);
                holder.twtnm = (TextView) convertView
                        .findViewById(R.id.twthandle);
                holder.twtimg = (ImageView) convertView
                        .findViewById(R.id.avatar);
                holder.twtdt = (TextView) convertView
                        .findViewById(R.id.created);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
               holder.twtdata.setOnTextLinkClickListener(this);
                holder.twtdata.gatherLinksForText(timelines[position]);
                holder.twtdata.setTextColor(Color.BLACK);
                holder.twtdata.setLinkTextColor(Color.BLUE);

                MovementMethod m = holder.twtdata.getMovementMethod();
                if ((m == null) || !(m instanceof LinkMovementMethod)) {
                    if (holder.twtdata.getLinksClickable()) {
                        holder.twtdata.setMovementMethod(LinkMovementMethod.getInstance());
                    }
                }

            if (bmpimg1[position] != null)
                holder.twtimg.setImageBitmap(bmpimg1[position]);
            holder.twtnm.setText(twitterhandles[position]);
            Date credate = new Date(created[position]);

            String dt = credate.getDate() + " "
                    + getMonthName(credate.getMonth());
            holder.twtdt.setText(dt);

            holder.twtdata.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    pos = position;
                    if(linkselected==true)
                        return;
                    childSelected = true;

                    Log.i("mention data", timelines[position]);
                    Intent textintent = new Intent(ctx, TimelineRe.class);
                    textintent.putExtra("userid", userid[position]);
                    textintent.putExtra("nm", twitterhandles[position]);
                    textintent.putExtra("msg", timelines[position]);
                    textintent.putExtra("pos", position);
                    textintent.putExtra("frm", "t");
                    textintent.putExtra("img", bmpimg1[position]);

                    if (urlentities[position] != null
                            && dpurlentities[position] != null) {
                    textintent.putExtra("urlentity", urlentities[position]);
                    textintent.putExtra("dpurlentity", dpurlentities[position]);
                    }
                    textintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    ctx.startActivity(textintent);
                }
            });
            holder.twtnm.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    childSelected = true;
                    Intent iconintent = new Intent(ctx, TweetRe.class);
                    iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    iconintent.putExtra("userid", userid[position]);
                    iconintent.putExtra("pos", position);
                    iconintent.putExtra("frm", "t");
                    iconintent.putExtra("img", bmpimg1[position]);
                    ctx.startActivity(iconintent);
                }
            });
            holder.twtimg.setOnClickListener(new OnClickListener() {

                public void onClick(View v) {
                    childSelected = true;
                    Intent iconintent = new Intent(ctx, TweetRe.class);
                    iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    iconintent.putExtra("userid", userid[position]);
                    iconintent.putExtra("pos", position);
                    iconintent.putExtra("frm", "t");
                    iconintent.putExtra("img", bmpimg1[position]);
                    ctx.startActivity(iconintent);
                }
            });
            return convertView;

        }
        @Override 
        public int getItemViewType(int position) { 
            return position; 
        } 

        @Override 
        public int getViewTypeCount() { 
            return timelines.length;
        } 
        static class ViewHolder {

            TextView twtdt;
            LinkEnabledTextView twtdata;
            ImageView twtimg;
            TextView twtnm;
        }

        public void onTextLinkClick(View textView, String clickedString)
        {
            if (isWiFiConnected == false) {
                Toast.makeText(ctx,
                        "No Internet Connection 
Please Check and Retry",
                        Toast.LENGTH_SHORT).show();

                return;
            }
            android.util.Log.v("Hyperlink clicked is :: " + clickedString, "Hyperlink clicked is :: " + clickedString);
            if(clickedString.charAt(0)=='#')
            {
                linkselected=true;
                childSelected=true;
                Intent reintent = new Intent(ctx,
                        Search.class);
                reintent.putExtra("frm", "l");
                reintent.putExtra("keyword",clickedString.substring(1, clickedString.length()) );
                reintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                ctx.startActivity(reintent);
            }
            else if(clickedString.charAt(0)=='@')
            {
                linkselected=true;
                childSelected=true;
                Intent iconintent = new Intent(ctx, TweetRe.class);
                iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                iconintent.putExtra("snm", clickedString.substring(1,clickedString.length()));
                iconintent.putExtra("frm", "l");
//              iconintent.putExtra("userid", userid[pos]);
//              iconintent.putExtra("pos", pos);

//              iconintent.putExtra("img", bmpimg2[pos]);
                ctx.startActivity(iconintent);
            }
            else if(clickedString.charAt(0)=='h')
            {
                linkselected=true;
                childSelected=true;
                Intent iconintent = new Intent(ctx, ShowLink.class);
                iconintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                iconintent.putExtra("url","http://www."+dpurlentities[pos]);
                ctx.startActivity(iconintent);

            }
        }
    }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

1.4m articles

1.4m replys

5 comments

57.0k users

...