您的位置:首页 > 其它

TextView中部分添加超链接,如何处理其他部分跳转关系

2016-06-14 20:00 531 查看
不熟悉在TextView中添加超链接的同学,请参考

超链接跳转

用户可能会有这样的需求,当点击非超链接部分时,是另外一种事件(最常见的为响应ListView onItemClick).当在TextView中添加超链接后,点击TextView中的普通文本就不再有任何响应(当然直接给TextView setOnClick是可以的 ),毫无疑问,咱们也可以在Adapter getView中给TextView添加单击事件。可是明明一个单击onItemClick放在两处就有点难以维护。下面给大家介绍一下我的方法,希望能够起到抛砖引玉的作用。

package com.hang.studykeyapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListView lv = new ListView(this);
setContentView(lv);
//1.在这里让Adapter获取ListView的引用
SimpleAdapter simpleAdapter = new SimpleAdapter(this, lv);
lv.setAdapter(simpleAdapter);
simpleAdapter.notifyDataSetChanged();
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(FirstActivity.this, "" + position, Toast.LENGTH_SHORT).show();

}
});

}

}


<?xml version="1.0" encoding="utf-8"?>
<!--item.xml-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:id="@+id/ll"
android:descendantFocusability="blocksDescendants"
tools:context=".FirstActivity">

<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>


package com.hang.studykeyapp;

import android.content.Context;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;

public class SimpleAdapter extends BaseAdapter {
private Context context;
final String testString = "ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss";
private ListView lv;

public SimpleAdapter(Context context, ListView lv) {
this.context = context;
this.lv = lv;
}

@Override
public int getCount() {
return 5;
}

@Override
public Object getItem(int position) {
return null;
}

@Override
public long getItemId(int position) {
return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;

if (convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
viewHolder.ll = (LinearLayout) convertView.findViewById(R.id.ll);
viewHolder.tv = (TextView) convertView.findViewById(R.id.tv);
viewHolder.tv.setMovementMethod(LinkMovementMethod.getInstance());
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tv.setText(testString);
viewHolder.tv.append(getUserlink("guchuuhang", "201011111"));
viewHolder.tv.append(testString);
final View copiedConvertView = convertView;
viewHolder.tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//2.当用户点击TextView非超链接部分时,调用listView onItemClick
if (lv != null) {
lv.getOnItemClickListener().onItemClick(lv, copiedConvertView, position, 0);
}
}
});

return convertView;
}

class ViewHolder {
LinearLayout ll;
TextView tv;
}

public SpannableString getUserlink(String userName,
String userId) {
SpannableString ss = new SpannableString(userName);
URLSpan urlSpan = new URLSpan("gch://" + userId);
ss.setSpan(urlSpan, 0, ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return ss;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  超链接