gpt4 book ai didi

java - 使用 SpannableString 长按 TextView 时出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 05:07:02 25 4
gpt4 key购买 nike

我有一个带有 SpannableString 的 TextView,因为我希望在用户单击 View 的不同位置时执行不同的操作。这是我的代码:

@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”时,就会显示 toast 。 (非常好。)

但是,当我长按“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 的原因是什么?

最佳答案

您必须添加一个方法来捕获 longClick 事件。在这种情况下,如果你想控制 TextView :

tv.setOnLongClickListener(new View.OnLongClickListener() {

@Override
public boolean onLongClick(View v) {

Toast.makeText(HomeSafeActivity.this, "Long preess", Toast.LENGTH_LONG).show();

return true;
}
});

关于java - 使用 SpannableString 长按 TextView 时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30048976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com