2017-05-25 12 views
-3

同じリストビュー内のtextViewの値に基づいて、カスタムリストビュー内の2つのイメージビューの可視性を設定しようとしています。しかし、私はNullPointerExceptionがImageViewの可視性を設定する際のヌルポインタ例外

を取得しています

によって引き起こさ:java.lang.NullPointerExceptionが:nullのオブジェクト参照に '無効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); 

     } 
    } 
} 
} 

誰もこの問題を解決する方法を教えてもらえますか?

+0

アダプターを使用してアクティビティーでListView項目をループしようとしていますが、それはひどく間違っています。ベストプラクティスを適用してリサイクルビューを使用することをお勧めします。ここに参考文献です。 https://developer.android.com/training/material/lists-cards.html –

答えて

1

をチェックする必要があります(それがヌルかどうかをチェックする以外に)

私が思うように、イメージビューと作業したいテキストビューの両方がリストビューのレイアウトの一部である場合は、アダプタで直接チェックする方が簡単だと思います。適切な値を表示して設定します。

アクティビティの値とビューを確認するだけでは問題はありません。すべてのビューが正しく初期化されているアダプターで、すでに行っているチェックを行うことができます。

0

あなたはImageViewの

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

}それはあなたが提供するので、あなたのビューがNULLであることを取得idを持つビューが見つからないと、あなたが操作を行うことができないようだ

関連する問題