设置ImageView

时间:2017-05-25 06:55:45

标签: android listview android-imageview

我正在尝试根据同一列表视图中textView中的值设置自定义列表视图中两个图像视图的可见性。但是,我得到一个NullPointerException

  

引起:java.lang.NullPointerException:尝试在空对象引用上调用虚方法'void android.widget.ImageView.setVisibility(int)'

就行了

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);

        }
    }
}
}

有谁能告诉我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

它似乎找不到你提供的id的视图,因此你的视图变为null,你不能对它进行操作(除了检查它是否为null)。

如果您想要处理的imageview和textview都是listview行的布局的一部分,我相信,我认为直接在适配器中检查更容易,在那里创建视图并设置正确的值。

检查活动中的值和视图会使事情变得复杂。您可以在适配器中进行检查,您可以正确初始化所有视图。

答案 1 :(得分:0)

你应该查看imageview

if(iv_in_time != null){
iv_in_time.setVisibility(View.INVISIBLE);

}