如何使 ListItem Textview 用作 Twitter 推文并获得不同的 Linkify 点击? [英] How to make ListItem Textview to work as Twitter Tweets and get Different Linkify clicks?
问题描述
例如:
关注@SoccerBible,转发此消息和如果罗纳尔多进球https://bit.ly/133/com 今晚我们将赠送一双 Nike ClashVapor 8's 送给一位幸运的赢家!#RonaldoComp
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
在我的列表视图组件中.我在哪里显示推文列表.我已经为推文文本中的@、# 和 url 着色.所有这些都是动态可点击的.
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.
我的问题是如何使非彩色文本成为可点击的.我使用了 Linkify.addLinks 和 Pattern API 来使它们可点击.但我希望非 @,# 和 url 文本可以点击而不添加任何颜色.
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.
谢谢,多米尼克
推荐答案
对于推特应用,我也有同样的要求,点击推文的句柄,也点击推文的文本来获取推文详细信息.
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.
为此,我使用了这个 LinkEnabledTextView 这对我来说很容易完成任务.
For that I have used this LinkEnabledTextView and that become easy for me to do the task.
我刚刚在我的项目中添加了该类,然后在 List Item 中而不是简单的 TextView 中,我使用了 LinkEnabledTextView 的对象/实例.
I just added the class in my project and then in List Item instead simple TextView I used object/instance of the LinkEnabledTextView.
以上链接有完整的demo,请查看.
There is a complete demo in above link, Please check that.
适配器代码特别检查 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
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);
}
}
}
这篇关于如何使 ListItem Textview 用作 Twitter 推文并获得不同的 Linkify 点击?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!