设置 ImageView 可见性的空指针异常
Null pointer exception on setting visibility of ImageView
我正在尝试根据同一列表视图中文本视图中的值设置自定义列表视图中两个图像视图的可见性。但是,我得到一个 NullPointerException
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setVisibility(int)' on a null object reference
上线
iv_in_time.setVisibility(View.INVISIBLE);
我的 Java 文件是:
public class Attendance extends AppCompatActivity {
ImageButton ib_clear_srch;
EditText et_srch;
TextView tv_emp_name, tv_emp_status, tv_emp_in_time, tv_emp_out_time;
ImageView iv_in_time, iv_out_time, iv_pop_down, iv_emp_img;
ArrayList<EmpAttenModel> empAttenModelArrayList;
private EmpAttenAdapter empAttenAdapter;
ListView lv_emp_attendance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attendance);
et_srch = (EditText)findViewById(R.id.et_srch);
ib_clear_srch = (ImageButton)findViewById(R.id.ib_clear_srch);
ib_clear_srch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et_srch.setText(null);
}
});
View v;
tv_emp_name = (TextView)findViewById(R.id.tv_emp_name);
tv_emp_status = (TextView)findViewById(R.id.tv_emp_status);
tv_emp_in_time = (TextView)findViewById(R.id.tv_emp_in_time);
tv_emp_out_time = (TextView)findViewById(R.id.tv_emp_out_time);
iv_in_time = (ImageView)findViewById(R.id.iv_in_time);
iv_out_time = (ImageView)findViewById(R.id.iv_out_time);
iv_pop_down = (ImageView)findViewById(R.id.iv_pop_down);
iv_emp_img = (ImageView)findViewById(R.id.iv_emp_img);
lv_emp_attendance = (ListView)findViewById(R.id.lv_emp_atten);
empAttenModelArrayList = new ArrayList<>();
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Absent","In time", "Out time"));
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Working","9:30 AM", "Out time"));
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Present","9:30 AM", "5:00 PM"));
empAttenAdapter = new EmpAttenAdapter(empAttenModelArrayList,getApplicationContext());
lv_emp_attendance.setAdapter(empAttenAdapter);
TextView tv1;
for (int i = 0; i < lv_emp_attendance.getCount(); i++){
v = lv_emp_attendance.getAdapter().getView(i, null, null);
tv1 = (TextView)v.findViewById(R.id.tv_emp_status);
if(tv1.getText().toString().equals("Status-Absent")){
iv_in_time.setVisibility(View.INVISIBLE);
iv_out_time.setVisibility(View.INVISIBLE);
tv_emp_in_time.setVisibility(View.INVISIBLE);
tv_emp_out_time.setText("In time");
}
if(tv1.getText().toString().equals("Status-Working")){
iv_out_time.setVisibility(View.INVISIBLE);
}
}
}
}
谁能告诉我如何解决这个问题?
你应该检查 imageview
if(iv_in_time != null){
iv_in_time.setVisibility(View.INVISIBLE);
}
它似乎找不到具有您提供的 ID 的视图,因此您的视图变为空并且您无法对其进行操作(除了检查它是否为空)。
如果你想处理的图像视图和文本视图都是列表视图行布局的一部分,我相信,我认为你直接在你创建的适配器中检查会更容易视图并设置正确的值。
检查 activity 中的值和视图只会使事情复杂化。您可以检查您已经在适配器中进行的检查,您的所有视图都已正确初始化。
我正在尝试根据同一列表视图中文本视图中的值设置自定义列表视图中两个图像视图的可见性。但是,我得到一个 NullPointerException
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setVisibility(int)' on a null object reference
上线
iv_in_time.setVisibility(View.INVISIBLE);
我的 Java 文件是:
public class Attendance extends AppCompatActivity {
ImageButton ib_clear_srch;
EditText et_srch;
TextView tv_emp_name, tv_emp_status, tv_emp_in_time, tv_emp_out_time;
ImageView iv_in_time, iv_out_time, iv_pop_down, iv_emp_img;
ArrayList<EmpAttenModel> empAttenModelArrayList;
private EmpAttenAdapter empAttenAdapter;
ListView lv_emp_attendance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_attendance);
et_srch = (EditText)findViewById(R.id.et_srch);
ib_clear_srch = (ImageButton)findViewById(R.id.ib_clear_srch);
ib_clear_srch.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et_srch.setText(null);
}
});
View v;
tv_emp_name = (TextView)findViewById(R.id.tv_emp_name);
tv_emp_status = (TextView)findViewById(R.id.tv_emp_status);
tv_emp_in_time = (TextView)findViewById(R.id.tv_emp_in_time);
tv_emp_out_time = (TextView)findViewById(R.id.tv_emp_out_time);
iv_in_time = (ImageView)findViewById(R.id.iv_in_time);
iv_out_time = (ImageView)findViewById(R.id.iv_out_time);
iv_pop_down = (ImageView)findViewById(R.id.iv_pop_down);
iv_emp_img = (ImageView)findViewById(R.id.iv_emp_img);
lv_emp_attendance = (ListView)findViewById(R.id.lv_emp_atten);
empAttenModelArrayList = new ArrayList<>();
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Absent","In time", "Out time"));
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Working","9:30 AM", "Out time"));
empAttenModelArrayList.add(new EmpAttenModel("Ravi Sharma", "Status-Present","9:30 AM", "5:00 PM"));
empAttenAdapter = new EmpAttenAdapter(empAttenModelArrayList,getApplicationContext());
lv_emp_attendance.setAdapter(empAttenAdapter);
TextView tv1;
for (int i = 0; i < lv_emp_attendance.getCount(); i++){
v = lv_emp_attendance.getAdapter().getView(i, null, null);
tv1 = (TextView)v.findViewById(R.id.tv_emp_status);
if(tv1.getText().toString().equals("Status-Absent")){
iv_in_time.setVisibility(View.INVISIBLE);
iv_out_time.setVisibility(View.INVISIBLE);
tv_emp_in_time.setVisibility(View.INVISIBLE);
tv_emp_out_time.setText("In time");
}
if(tv1.getText().toString().equals("Status-Working")){
iv_out_time.setVisibility(View.INVISIBLE);
}
}
}
}
谁能告诉我如何解决这个问题?
你应该检查 imageview
if(iv_in_time != null){
iv_in_time.setVisibility(View.INVISIBLE);
}
它似乎找不到具有您提供的 ID 的视图,因此您的视图变为空并且您无法对其进行操作(除了检查它是否为空)。
如果你想处理的图像视图和文本视图都是列表视图行布局的一部分,我相信,我认为你直接在你创建的适配器中检查会更容易视图并设置正确的值。
检查 activity 中的值和视图只会使事情复杂化。您可以检查您已经在适配器中进行的检查,您的所有视图都已正确初始化。