Twitter アプリの場合、ツイートのハンドルをクリックし、ツイートのテキストをクリックしてツイートの詳細を取得するという同じ要件もありました。
そのために、このLinkEnabledTextViewを使用しました。これにより、タスクを簡単に実行できるようになりました。
プロジェクトにクラスを追加しただけで、List Item の代わりに単純な 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);
}
}
}