Android添加侦听器,同时保留原始侦听器

时间:2017-12-04 23:15:45

标签: java android listener

我想在文本选择上发生一些事情,即OnLongClickListener,但在其中我需要获取选定的文本,默认情况下OnLongClickListener处理(至少我认为是)。 实际结果,通过添加我的监听器,是我的方法被调用,我试图获取选择范围的索引,但这些是0.我还可以在调试器中看到,在该妈妈中没有选择任何文本。

代码:

textView.setTextIsSelectable(true);
textView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            int start = textView.getSelectionStart();
            int end = textView.getSelectionEnd();
            // the rest of code
        }
    }
}

问题:如何保留默认侦听器,首先调用它并进行选择,然后调用我的函数。

1 个答案:

答案 0 :(得分:0)

我认为你误解了听众的工作方式。它们不会替换标准行为,因此没有默认侦听器可以调用以确保发生某些事情。

在这种情况下,很可能只是在OnLongClick实际更新其选择之前调用了您的TextView侦听器。在这种情况下,您可以尝试让听众delay its processing在设置选择之前。为此目的,请使用Handler.postDelayed()AsyncTask。例如:

textView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            new Handler().post(() -> {/*your code here*/});
        }
    }
}

但是,话虽如此,OnLongClickListener并不是用于文本选择更改的正确监听器。您需要 ActionMode回调

How to set up a listener on the selected text in TextView