2015-12-31 3 views
0

Может ли кто-нибудь помочь мне разобраться, почему мой список повторяет результаты, полученные из базы данных. Я использую Listview с флажком. Вот мой код ниже.ListView отображает данные массива дважды

public class AccessLevels extends Fragment { 

MyAdminAdapter adminAdapter = null; 
Guards guards; 

ListView listView; 

public ArrayList<Guards> guardsName; 

public String str_name; 
public boolean isAdmin; 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.fragment_access_levels, container, false); 

    listView = (ListView)view.findViewById(R.id.list_of_guards); 

    return view; 
} 

private class MyAdminAdapter extends ArrayAdapter<Guards>{ 

    private ArrayList<Guards> objectsList; 

    public MyAdminAdapter(Context context, int resource, ArrayList<Guards> objectsList) { 
     super(context, resource, objectsList); 
     this.objectsList = objectsList; 
     this.objectsList.addAll(objectsList); 
    } 

    private class ViewHolder{ 
     CheckBox chk_name; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolder holder = null; 

     if (convertView == null){ 
      LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = vi.inflate(R.layout.single_row_access, null); 

      holder = new ViewHolder(); 
      holder.chk_name = (CheckBox) convertView.findViewById(R.id.chk_guard); 
      convertView.setTag(holder); 
     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     final Guards guards = objectsList.get(position); 
     holder.chk_name.setText(guards.getName()); 
     holder.chk_name.setChecked(guards.isChecked()); 
     holder.chk_name.setTag(guards); 

     holder.chk_name.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 
       CheckBox cb = (CheckBox) v; 
       Guards guards = (Guards) cb.getTag(); 
       guards.setChecked(cb.isChecked()); 
      } 
     }); 

     return convertView; 
    } 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
} 
} 

Я получаю данные в магазине так.

private void DisplayAllNames() { 

    guardsName = new ArrayList<Guards>(); 

    ParseQuery<ParseObject> guardsQuery = ParseQuery.getQuery("Guards"); 
    guardsQuery.whereExists("Name"); 
    guardsQuery.orderByAscending("Name"); 
    guardsQuery.findInBackground(new FindCallback<ParseObject>() { 
     @Override 
     public void done(List<ParseObject> list, ParseException e) { 
      if (e == null) { 
       if (list.size() > 0) { 
        for (int i = 0; i < list.size(); i++) { 
         ParseObject data = list.get(i); 
         str_name = data.getString("Name"); 
         isAdmin = data.getBoolean("admin"); 

         guards = new Guards(str_name, isAdmin); 
         guardsName.add(guards); 
        } 

        adminAdapter = new MyAdminAdapter(getActivity(), R.layout.single_row_access, guardsName); 
        listView.setAdapter(adminAdapter); 
       } else { 
       } 
      } else { 
      } 
     } 
    }); 
} 

Заранее спасибо.

+0

Я был бы полезен для публикации результатов, которые вы получите. – Vedda

ответ

1

Удалите эту строку из ваших MyAdminAdapter «конструктору:

this.objectsList.addAll(objectsList); 

Вы уже добавлять свои пункты в предыдущей инструкции:

this.objectsList = objectsList; 
1

В вашей MyAdminAdapter вы добавляете данные дважды:

this.objectsList = objectsList; 
    this.objectsList.addAll(objectsList); 

Вам просто нужно удалить secon d.

+0

Спасибо. Не знаю, как я это пропустил. –