Android:Setvisibility to visible导致按钮上的nullpointerexception

时间:2013-12-23 07:10:50

标签: android

这似乎已经在stackoverflow中被问过了一段时间,对于大多数问题没有令人信服的答案。无论如何,我再次尝试。 我有一个Android应用程序,其中显示一个列表,其中每行都有一个Edittext和Button组件,如下所示

enter image description here

视图出现时,Edittext不可编辑。我使用下面的代码执行此操作:

private void setNameAsEditable (View rowView, boolean setToEditable) {

    EditText textView = (EditText) rowView
            .findViewById(R.id.edittext_name);
    textView.setFocusableInTouchMode(setToEditable);
    textView.setFocusable(setToEditable);

    ImageButton button = (ImageButton) rowView
            .findViewById(R.id.button_save_name);

            if ( setToEditable ) {

                    button.setVisibility (View.VISIBLE);  // nullpointerexception here
    } else {
        button.setVisibility (View.GONE);
    }

当我长按,并且setToEditable为true时,它会在上面指定的行中抛出nullpointerexception。它似乎没有找到按钮组件。但是,'button.setVisibility(View.GONE);'当setToEditable为false而没有任何问题时执行。

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

rowView似乎是您的EditText,而您确实希望父视图中包含button。如果您调用findViewById并且该视图中不存在该ID,则它将返回null。

答案 1 :(得分:0)

我认为问题是视图控件的初始化。您应该在顶部初始化EditText & ImageButton

      EditText textView;
      ImageButton button ;
      ...
      ...
      ...
      EditText textView = (EditText) rowView.findViewById(R.id.edittext_name);
      ImageButton button = (ImageButton) rowView.findViewById(R.id.button_save_name);

接下来就是尝试在try& amp;中编写代码catch block让你明白错误是什么,bug在哪里。