1

I have a Listview of custom adapter which has five fields in it. Name, Cnic, No, Desgination and attendance. Now what i want to do is that i have to check whether all the list items have some value written after attendance column. If there is any thing on attendance column then the user can move to next activity otherwise it will prompt user to mark attendance.

Here is my code for getting value and setting in the adapter.

  for (int p = 0; p < teacherList.size(); p++) {
        details = new DetailsTeacherwebservice();
        //ArrayList<Object> baris = data.get(p);
        details.setId(teacherList.get(p).getId());
        details.setTeachername(teacherList.get(p).getTeachername());
        details.setTeachercnic(teacherList.get(p).getTeachercnic());
        details.setTeacherno(teacherList.get(p).getTeacherno());
        details.setTeachergender(teacherList.get(p).getTeachergender());
        details.setAttendance(teacherList.get(p).getAttendance());

        addas.add(details);
    }
    cusadapter = new CustomAdapterTeacherWebservice(TeacherWebserviceMainList.this, addas);
    listcontent.setAdapter(cusadapter);

Here is the code for moving to next activity

next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent view_order_intent = new Intent(TeacherList.this, M_TeacherPresenceList.class);
            startActivity(view_order_intent);
            finish();
        }
    });

User can not move to next activity if attendance is empty or Null so that user has to mark attendance for all teachers in the list and then can go to next. Please Help

Tenten Ponce
  • 2,436
  • 1
  • 13
  • 40

4 Answers4

1

write a method returning boolean value to check if any one of the attendance is missing, when the missing attendance is found, the loop is exited immediately so that attendanceStatus is accurate.

private boolean hasAllAttendance(){
    boolean attendanceStatus= true;

 for (int p = 0; p < teacherList.size(); p++) {
    details = new DetailsTeacherwebservice();

    if(teacherList.get(p).getAttendance() == null || 
           teacherList.get(p).getAttendance().equal("") ){
        attendanceStatus = false;
        break;
    }
  return attendanceStatus;
}

now, using this method, control your activity transition or toast message

next.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

    if(hasAllAttendance()){           
        Intent view_order_intent = new 
        Intent(TeacherList.this, M_TeacherPresenceList.class);
        startActivity(view_order_intent);
        finish();
    } else //Toast message

  }
});
Sabid Habib
  • 419
  • 1
  • 4
  • 16
  • Ok let me test please –  Jan 01 '18 at 06:50
  • welcome. try to use 'for each' loops for iterating objects as accessing objects in a list using index is error prone. and please accept the answer if it's the correct one for you. – Sabid Habib Jan 01 '18 at 06:57
1

Try this

    ArrayList<Boolean> isAllMarked = new ArrayList<>();
    int attentednceMarkedCount = 0;
    for (int p = 0; p < teacherList.size(); p++) {
        if (!TextUtils.isEmpty(teacherList.get(p).getAttendance())) {
            isAllMarked.add(true);
        } else {
            isAllMarked.add(false);
        }
    }

    for (int i = 0; i < isAllMarked.size(); i++) {
        if (isAllMarked.get(i)) {  //if marked true
            attentednceMarkedCount = attentednceMarkedCount + 1;
        }
    }

    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (attentednceMarkedCount ==teacherList.size()) {
                Intent view_order_intent = new Intent(TeacherList.this, M_TeacherPresenceList.class);
                startActivity(view_order_intent);
                finish();
            } else {
                showAlert()
            }

        }
    });
Ramesh sambu
  • 3,577
  • 2
  • 24
  • 39
0

//Try this

boolean attendance = false;

    for (int p = 0; p < teacherList.size(); p++) {
        details = new DetailsTeacherwebservice();

        if (teacherList.get(p).getAttendance() != null ||
                teacherList.get(p).getAttendance().equal("")) {
            attendance = true;
        } else {
            attendance = false;
        }
    }

    next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if (attendance) {
                Intent view_order_intent = new
                        Intent(TeacherList.this, M_TeacherPresenceList.class);
                startActivity(view_order_intent);
                finish();
            } else {//Toast mark attendance}

            }
        });
    }
Nikhil Lotke
  • 605
  • 7
  • 15
Syed Hamza Hassan
  • 710
  • 1
  • 11
  • 24
0

Use your next.setOnClickListener(new View.OnClickListener() on getView() method of Adapter. Like -

private boolean checkAttendance(){
    boolean hasAll = true;

 for (int i = 0; i < teacherList.size(); i++) {
    if(att.empty() || att == null){
        hasAll = false;
        break;
    }
  return hasAll ;
}

on getView() method -

next.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          if(checkAttendance()){
            Intent view_order_intent = new Intent(TeacherList.this, M_TeacherPresenceList.class);
            startActivity(view_order_intent);
            finish();
           }else{
             showYourCustomAlert()  // your alert dialog
           }
        }
    });
AGM Tazim
  • 2,213
  • 3
  • 16
  • 25