沉寂这么多天,一直在搞安卓开发,刚有些眉目,今天分享一个textview 部分点击事件的实现方法。这个功能主要用到的是SpannableString 这个安卓自带类。详细代码如下:

 

  

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  LinearLayout ll =null;
  if(convertView==null){
   ll=(LinearLayout) View.inflate(context,R.layout.comment_format_setting ,null);
  }else{
   ll = (LinearLayout) convertView;
  }
  TextView name = (TextView) ll.findViewById(R.id.username_text);    //用户名称
  TextView time = (TextView) ll.findViewById(R.id.time_text);        //时间
  TextView commcontent_text = (TextView) ll.findViewById(R.id.commcontent_text);        //评论主体内容
  TextView blogcontent_text = (TextView) ll.findViewById(R.id.blogcontent_text);            //微博内容主体
  
  name.setText(AllDateList.get(position).get("uname"));
  time.setText(AllDateList.get(position).get("stime"));
  commcontent_text.setText( getClickableSpan( position));    //设置SpannableString 为textview的内容
  commcontent_text.setMovementMethod(LinkMovementMethod.getInstance());  //一定要加上,这个是为了激活点击事件,不加则不会触发点击事件。
  blogcontent_text.setText(AllDateList.get(position).get("pcon"));
  return ll;
 }
 
  private SpannableString getClickableSpan(int position)
     {
       OnClickListener l = new OnClickListener(){
         @Override
         public void onClick(View v)
         {
           Toast.makeText(context, "Click Success", Toast.LENGTH_SHORT).show();
           Log.v("atme", "点击了");
         }
       };

       SpannableString spanableInfo = new SpannableString(AllDateList.get(position).get("scon"));
       int start = 0;
       int end = 4;
       spanableInfo.setSpan(new Clickable(l), start, end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);      
       return spanableInfo;
     }

  class Clickable extends ClickableSpan implements OnClickListener{
      private final OnClickListener mListener;

      public Clickable(View.OnClickListener l){
        mListener = l;
      }

    /** 设置显示格式**/
      @Override
      public void updateDrawState(TextPaint ds) {
          super.updateDrawState(ds);
          ds.setColor(context.getResources().getColor(R.color.atuser));
                ds.setUnderlineText(false);    
  //设置下划线
      }

      @Override
      public void onClick(View v){
        mListener.onClick(v);
  }

  }

 

红色部分标注是一些要注意的地方,尤其 是激活点击事件,一定要加上,就是因为这个没加浪费了我好长时间,如果要想在一个textview 中加多个点击事件,刚添加多个

   spanableInfo.setSpan(new Clickable(l), start, end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);