Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为TextView中的文本添加不同的侦听器_Java_Android_Textview - Fatal编程技术网

Java 为TextView中的文本添加不同的侦听器

Java 为TextView中的文本添加不同的侦听器,java,android,textview,Java,Android,Textview,我有一个文本视图,其中设置了一些文本: lblText.setText("Hello How Are You"); 现在,我希望它以以下方式: 每当我点击Hello时,就会显示一个Toast说“Hello”。 每当我点击How,就会显示一个土司,上面写着“How” 等等 如何检查我单击的单词,并在文本视图中对不同的单词执行不同的操作如果您不想拥有超过1个文本视图,则必须使用SpannableString 编辑: 对于每个可以注册ClickablesEnable的字符串,例如: private

我有一个文本视图,其中设置了一些文本:

lblText.setText("Hello How Are You");
现在,我希望它以以下方式:

每当我点击Hello时,就会显示一个
Toast
说“Hello”。 每当我点击How,就会显示一个
土司
,上面写着“How”

等等


如何检查我单击的单词,并在
文本视图中对不同的单词执行不同的操作

如果您不想拥有超过1个
文本视图,则必须使用
SpannableString

编辑:

对于每个可以注册ClickablesEnable的字符串,例如:

private class MyClickableSpannable extends ClickableSpan {

    private final String mStringToShow;


    public MyClickableSpannable(String stringToShow) {
        mStringToShow = stringToShow;
    } 

    @Override
    public void onClick(View widget) {
         Toast.makeText(context, mStringToShow, Toast.LENGHT_SHORT).show();
    }
}
要设置侦听器,请执行以下操作:

String myString = "Hello How Are You"; 
String hello = "Hello";
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(myString);
spannableStringBuilder.setSpan(
   new MyClickableSpannable(hello), startIndexOfHello,
   startIndexOfHello + hello.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

试试这个。这对我很有效

  SpannableString SpanString = new SpannableString(
            "Hello How Are You");

    ClickableSpan hello = new ClickableSpan() {
        @Override
        public void onClick(View textView) {

        Toast.makeText(this, "Hello is clicked", Toast.LENGTH_SHORT).show();
        }
    };

    ClickableSpan how = new ClickableSpan() {
        @Override
        public void onClick(View textView) {

          Toast.makeText(this, "how is clicked", Toast.LENGTH_SHORT).show();

        }
    };

    SpanString.setSpan(hello, 0, 6, 0);
    SpanString.setSpan(how, 6, 9, 0);


    lblText.setMovementMethod(LinkMovementMethod.getInstance());
    lblText.setText(SpanString, BufferType.SPANNABLE);

这是一个工作示例。请理解它,并根据需要将其应用到代码中

  SpannableString ss = new SpannableString("Hello How Are You");
    ClickableSpan clickableSpan1 = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
           //toast hello
        }
    };
    ClickableSpan clickableSpan2 = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
          // toast how
        }
    };
    ClickableSpan clickableSpan3 = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
           //toast are
        }
    };
    ClickableSpan clickableSpan4 = new ClickableSpan() {
        @Override
        public void onClick(View textView) {
           //toast you
        }
    };
    tView.setText(ss);
    ss.setSpan(clickableSpan1, 0, 4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ss.setSpan(clickableSpan2, 5, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ss.setSpan(clickableSpan3, 9, 12, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    ss.setSpan(clickableSpan4, 12, 15, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
试试这个:

TextView tv = (TextView)findViewById(R.id.textView);      
    Spannable span = Spannable.Factory.getInstance().newSpannable("Hello How Are You");   
span.setSpan(new ClickableSpan() {  
    @Override
    public void onClick(View v) {  
        Log.d("main", "Helo clicked");
        Toast.makeText(MainActivity.this, "hello clicked", Toast.LENGTH_SHORT).show(); 
    } }, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(new ClickableSpan() {  
   @Override
   public void onClick(View v) {  
       Log.d("main", "how clicked");
       Toast.makeText(MainActivity.this, "how clicked", Toast.LENGTH_SHORT).show(); 
   } }, 6, 9, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tv.setText(span); 
tv.setMovementMethod(LinkMovementMethod.getInstance());

我将如何设置它的侦听器。你能给我举个例子吗?@Blackbelt你太快了。:-)在回答这类问题时::-)@Blackbelt我认为OP想要一个在a的特定x,y点得到一个单词的一般解决方案TextView@pskink
String.indexOf()
就是他想要的needs@blackbelt我想他的意思是他有MotionEvent,基于getX/Y,他想在文本视图中找到对应于该点检查的单词,然后