这似乎已经在stackoverflow中被问过了一段时间,对于大多数问题没有令人信服的答案。无论如何,我再次尝试。 我有一个Android应用程序,其中显示一个列表,其中每行都有一个Edittext和Button组件,如下所示
视图出现时,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而没有任何问题时执行。
有人可以帮忙吗?
答案 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在哪里。