在空对象引用上无效android.widget.ImageView.setEnabled(boolean)'

时间:2018-12-03 01:12:30

标签: java android

我正在使用一个简单的Java库文件来还原和重做文本,如教程和示例android应用程序中所示,但是对我来说,当我运行该应用程序时,它会显示以下错误

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setEnabled(boolean)' on a null object reference
    at com.apps.primalnotes.Fragments.EditorFragment.textAction(EditorFragment.java:1023)
    at com.apps.primalnotes.Fragments.EditorFragment.onCreateView(EditorFragment.java:84)

以下是我在GitHub enter link description here

上关注的库和方法

而我正在执行以下操作

 EditorFragment extends Pantalla  implements TextUndoRedo.TextChangeInfo, View.OnClickListener{
    private TextUndoRedo TUR;
    private ImageView undo, redo;

 public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.editor, container, false);

        getActivity().setTitle("Editor");

        setHasOptionsMenu(true);

        imm =(InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        base = new DataBase(context, null);


    text = (EditText) view.findViewById(R.id.texto);
    undo = (ImageView)view.findViewById(R.id.undo);
    redo = (ImageView)view.findViewById(R.id.redo);
    TUR = new TextUndoRedo(text, this);

            textAction(); "Showing error here"

            undo.setOnClickListener(this);
            redo.setOnClickListener(this);
    }

    @Override
        public void textAction() {
            undo.setEnabled(TUR.canUndo());  "Showing error here"
            redo.setEnabled(TUR.canRedo());
        }

    @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.undo:
                    TUR.exeUndo();
                    break;
                case R.id.redo:
                    TUR.exeRedo();
                    break;

3 个答案:

答案 0 :(得分:0)

您的代码没有“ setContentView(R.layout。{布局的文件名})”。

您能检查一下吗?应该在使用findViewById方法之前执行。

答案 1 :(得分:0)

这里是Github源码中的代码

btn_undo = (Button) findViewById(R.id.btn_undo);
btn_undo.setOnClickListener(this);
btn_redo = (Button) findViewById(R.id.btn_redo);
btn_redo.setOnClickListener(this);

这是您代码中的代码:

text = (EditText) view.findViewById(R.id.texto);
undo = (ImageView)view.findViewById(R.id.undo);
redo = (ImageView)view.findViewById(R.id.redo);
TUR = new TextUndoRedo(text, this);

使用Button进行撤消/重做的示例,而您使用ImageView。检查xml中的ImageView ID是什么。与此处的其他内容相同,您的撤消/重做ImageView为Null。

答案 2 :(得分:0)

检查您的XML。您用于撤消和重做的ImageView应该具有一个如下所示的ID,

android:id="@+id/undo

android:id="@+id/redo"