【发布时间】:2013-11-12 08:50:42
【问题描述】:
我有几个TextView 和几个EditText,我想从中选择一个数据的子字符串来复制API 级别10 及更高级别。我已经为这个问题实现了一个OnLongClickListener,但是它(可以理解) 抛出 ArrayOutOfBoundsException:
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
//copy
longPressedView=v;
startSelection=((TextView)v).getSelectionStart();
endSelection=((TextView)v).getSelectionEnd();
Log.d(TAG, "Selection starts at "+startSelection+" and ends at "+endSelection);
if(startSelection>endSelection)
{
startSelection=startSelection+endSelection;
endSelection=startSelection-endSelection;
startSelection=startSelection-endSelection;
Log.d(TAG, "After interchanging positions selection starts at "+startSelection+" and ends at "+endSelection);
}
mSelectedText=((TextView)v).getText().toString().substring(startSelection, endSelection);
mActionMode=startActionMode(actionModeCallback);
return true;
}
我考虑过实现 OnTouchListener,但这只会返回 x 和 y 位置,这对我没有用处。
java.lang.StringIndexOutOfBoundsException: length=93; regionStart=-1; regionLength=0
at java.lang.String.startEndAndLength(String.java:583)
at java.lang.String.substring(String.java:1464)
at com.example.clipboardtest.MainActivity.onClick(MainActivity.java:139)
at android.view.View.performClick(View.java:4240)
at android.view.View$PerformClick.run(View.java:17721)
at android.os.Handler.handleCallback(Handler.java:730)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
【问题讨论】:
-
在您的日志中打印的
startselection和endselection值是什么?还有mSelectedText的值是多少? -
什么都没有,而是抛出了一个很大的StringIndexOutOfBoundsException,顺便说一下我用TextView试试。
-
首先,当你第一次长按文本视图时。开始选择和结束选择是-1。这就是为什么,那个错误来了
-
它没有从 TextView 中选择文本。
标签: android textview android-edittext clipboardmanager