【发布时间】:2016-07-28 19:53:14
【问题描述】:
无论我做什么,当我尝试在开关盒内调用 toast 时,都会不断收到类似 null object reference 的错误。 switch方法所在的类扩展了FragmentActivity
我已经尝试扩展 Fragment/v4。和没有成功的活动。
我还尝试将getContext, getBaseContext, getAppliction();, getApplication().getBaseContext etc 作为上下文传递给没有成功的吐司
如果我在我的 MainActivity 中创建一个公共 Toast 对象并像这样使用它MainActivity.copyToast.show(); 它可以工作,但这个解决方案看起来不太好。
我想把它放在一行中:Toast.makeText(this.getApplicationContext(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();
全班:
public class CustomTextSelectionMenu extends Fragment implements android.view.ActionMode.Callback {
@Override
public boolean onCreateActionMode(android.view.ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.menu_main, menu);
menu.removeItem(android.R.id.selectAll);
menu.removeItem(android.R.id.paste);
return true;
}
@Override
public boolean onPrepareActionMode(android.view.ActionMode mode, Menu menu) {
return false;
}
@Override
public boolean onActionItemClicked(android.view.ActionMode mode, MenuItem item) {
int selectionStart = editText.getSelectionStart();
int selectionEnd = editText.getSelectionEnd();
if (selectionEnd > selectionStart) {
Spannable str = editText.getText();
boolean exists = false;
StyleSpan[] styleSpans;
switch (item.getItemId()) {
//--------------------COPY----------------------------
case android.R.id.copy:
CharSequence charSequence = editText.getText().subSequence(selectionStart, selectionEnd);
ClipData clip = ClipData.newPlainText("simple text", charSequence);
MainActivity.clipboard.setPrimaryClip(clip);
Toast.makeText(getActivity().getApplicationContext(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();
//MainActivity.copyToast.show();
break;
//--------------------BOLD----------------------------
case R.id.bold:
styleSpans = str.getSpans(selectionStart, selectionEnd, StyleSpan.class);
// If the selected text-part already has BOLD style on it, then
// we need to disable it
for (int i = 0; i < styleSpans.length; i++) {
if (styleSpans[i].getStyle() == android.graphics.Typeface.BOLD) {
str.removeSpan(styleSpans[i]);
exists = true;
}
}
// Else we set BOLD style on it
if (!exists) {
str.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), selectionStart, selectionEnd,
Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
}
editText.setSelection(selectionStart, selectionEnd);
break;
}
}
return true;
}
@Override
public void onDestroyActionMode(android.view.ActionMode mode) {
}
}
堆栈跟踪:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:110)
at org.m.muddzboy.QuoteCreator.CustomTextSelectionMenu.onActionItemClicked(CustomTextSelectionMenu.java:182)
at android.widget.Editor$SelectionActionModeCallback.onActionItemClicked(Editor.java:3228)
第 182 行指向这一点:
Toast.makeText(this.getApplicationContext(), "Copied to clipboard.", Toast.LENGTH_SHORT).show();
【问题讨论】:
-
是你在片段中的代码吗?
-
this.getApplicationContext() 代替 this ......尝试将 getActivity() 作为上下文
-
Toast.makeText(getActivity(), "复制到剪贴板。", Toast.LENGTH_SHORT).show();
-
....你到底为什么将 EditTexts 存储在静态变量中???
-
@CapDroid 此代码位于自定义 SelectionActionModeCallback 类中。 getActivity 不起作用
标签: android