如何使ListItem Textview像Twitter Tweets一样工作并获得不同的Linkify点击率?[英] How to make ListItem Textview to work as Twitter Tweets and get Different Linkify clicks?

本文是小编为大家收集整理的关于如何使ListItem Textview像Twitter Tweets一样工作并获得不同的Linkify点击率?的处理/解决方法,可以参考本文帮助大家快速定位并解决问题,中文翻译不准确的可切换到English标签页查看源文。

问题描述

例如:

关注@sccerbible,rt这个,如果罗纳尔多分数 https:///bit.ly/133/com 今晚我们将释放一对耐克冲突 蒸汽8对一个幸运的赢家! #ronaldocomp

在我的listView组件中.我在哪里显示推文列表.我在Tweet文本中彩色@,#和URL.全部是动态可点击的.

我的问题是如何将非彩色文本作为可点击的.我使用了lindify.addlinks和模式API来使它们点击.但我希望非@,#和URL文本是Clicakble而不向它添加任何颜色.

谢谢, 多米尼克

推荐答案

对于Twitter应用程序,我对Tweets的句柄同时也是相同的要求,并单击Tweet的文本以获取Tweet详细信息.

我已经使用了这个 linkenabledtextview 这很容易让我完成任务.

我刚刚在我的项目中添加了类,然后在列表项中添加了简单的textview我使用了linkenabledtextview的对象/实例.

在上面的链接中有一个完整的演示,请检查.

编辑:适配器代码特别检查ontextlinkclick(),然后持有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 \nPlease 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);

            }
        }
    }

本文地址:https://www.itbaoku.cn/post/102630.html

问题描述

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

推荐答案

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 \nPlease 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);

            }
        }
    }