【问题标题】:Spannable string returning whole string on click单击时返回整个字符串的可扩展字符串
【发布时间】:2017-01-12 12:15:46
【问题描述】:

ListView 中的一行上使用按钮,并且能够使单行 Spannable 和数据库中的数据,但是当我单击它时返回整个字符串而不是一个单词这里是我来自 MyAdapter Class 的代码,我在其中输入值从数据库到Listview

public View getView(int i, View view, ViewGroup viewGroup) {
    Realm realm=Realm.getDefaultInstance();
    Word toEdit = realm.where(Word.class)
            .equalTo("id", 10).findFirst();
    int id_to_seperate=toEdit.getLang();

    LayoutInflater inflater= (LayoutInflater) Main.context.getSystemService(Main.context.LAYOUT_INFLATER_SERVICE);
   View row= inflater.inflate(R.layout.layout,viewGroup,false);
    TextView word= (TextView) row.findViewById(R.id.word_name);
    TextView meaning= (TextView) row.findViewById(R.id.word_define);
    Word temp=list.get(i);
    int idz=temp.getId();
    word.setText(temp.getWord());
    if(id_to_seperate==idz){
        String span[] = temp.getMeaning().substring(1).split(" ") ;
        SpannableString ss = new SpannableString(temp.getMeaning().substring(1));
        ClickableSpan spans[] = new ClickableSpan[span.length];
        for(int spanCount = 0 ; spanCount < span.length ; spanCount++){
            spans[spanCount] = new ClickableSpan() {
                @Override
                public void onClick(View textView) {

                    TextView v = (TextView)textView ;
                    String text = v.getText().toString() ;

                    Log.d("View" , text);
                }
            };
        }

        int start = 0 ;
        int end =0;
        try {
            for(int spanCount = 0 ; spanCount <span.length ; spanCount++){
                if(spanCount==0) {
                    end += span[spanCount].length();
                }else{

                    end += span[spanCount].length()+1;
                }
                ss.setSpan(spans[spanCount], start, end , Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                start += span[spanCount].length()+1;

            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        meaning.setText(ss);
        meaning.setMovementMethod(LinkMovementMethod.getInstance());

    }else {
        meaning.setText(temp.getMeaning().substring(1));
    }
    return row;
}

能够从列表中的特定行获取结果
对此但单击功能返回整个句子而不是跨度或单词,如果有人能告诉我我犯了什么错误,我将不胜感激
问候

【问题讨论】:

    标签: java android listview spannablestring


    【解决方案1】:

    你的代码有问题

    TextView v = (TextView)textView ;
    String text = v.getText().toString() ;
    

    TextView.getText().toString() 是返回全文。如果您想获得特定的ClickableSpan,请使用下面的ClickableSpan

    public class SpecialClickableSpan extends ClickableSpan {
    
        String text;
    
        public SpecialClickableSpan(String text){
             super();
             this.text = text;
        }
    
        @Override
        public void onClick(View widget) {
             Log.d(TAG, "onClick [" + text + "]");
        }
    }
    

    替换

    for(int spanCount = 0 ; spanCount < span.length ; spanCount++){
    
        spans[spanCount] = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
    
                TextView v = (TextView)textView ;
                String text = v.getText().toString() ;
                    Log.d("View" , text);
                }
            };
        }
    

    for(int spanCount = 0 ; spanCount < span.length ; spanCount++){
        spans[spanCount] =  new SpecialClickableSpan (span[spanCount ]);
    }
    

    【讨论】:

      猜你喜欢
      • 2013-05-02
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      相关资源
      最近更新 更多