我有一個帶有SpannableString的TextView,因爲我想在用戶點擊視圖的不同位置時做不同的事情。這是我的代碼:NullPointerException當在TextView上用SpannableString長按時
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
String str = "ClickMe";
SpannableString spStr = new SpannableString(str);
ClickableSpan clickSpan = new CustomizedClickableSpan(str);
spStr.setSpan(clickSpan, 0, str.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
tv.setText("PlainTextA");
tv.append(spStr);
tv.append("PlainTextB");
tv.setMovementMethod(LinkMovementMethod.getInstance());
setContentView(tv);
}
private class CustomizedClickableSpan extends ClickableSpan {
String text;
public CustomizedClickableSpan(String text) {
super();
this.text = text;
}
@Override
public void onClick(View widget) {
Toast.makeText(SpanTextView.this, text, Toast.LENGTH_SHORT).show();
}
}
之後,textView的文本是「PlainTextAClickMePlainTextB」。當我點擊「ClickMe」時,吐司正在顯示。 (這是非常好的。)
但是,當我長按「ClickMe」,應用程序崩潰! 這是我的日誌:
java.lang.NullPointerException
at android.widget.Editor.touchPositionIsInSelection(Editor.java:750)
at android.widget.Editor.performLongClick(Editor.java:851)
at android.widget.TextView.performLongClick(TextView.java:8390)
at android.view.View$CheckForLongPress.run(View.java:18419)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5050)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:806)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:622)
at dalvik.system.NativeStart.main(Native Method)
任何人都可以幫我嗎?非常感謝!
編輯:
感謝@Blackbelt。我只是添加這些代碼:
tv.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
//just consume the event
return true;
}
});
並且問題解決了!
順便說一下,NullPointerException
的原因是什麼?
它是否禁用*長按*手勢爲你的可能性? – Blackbelt
@Blackbelt我猜不是:*我想在用戶點擊時做不同的事情* –
我得到了同樣的問題。我可以通過以編程方式設置視圖字體(Editext/Textview)來解決此問題,而不是XML。請注意,對於我它只發生在crashlytics報道的三星棒棒糖版本上。 –