问题描述
例如:
关注@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); } } }
问题描述
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); } } }