Ich bin neu in Android-Entwicklung, also bitte bitte mit mir.ArrayList nicht nach der Verwendung von .clear() aktualisiert
Ich habe einen benutzerdefinierten ArrayAdapter, den ich aktualisieren möchte, indem Sie zum Aktualisieren nach unten wischen.
Ich verstehe, dass dies zu tun, um Ich muss:
- klar die Arraylist, die meine Daten (mit .clear()) hält
- Aktualisieren Sie die Arraylist mit den neuen Daten (unter Verwendung der getAbsentTeachers() -Methode)
- Verwendung notifyDataSetChanged() auf dem ArrayAdapter
Nachdem ich die Arraylist zu löschen, ruft getAbsentTeachers() und notifyDataSetChanged() die Arraylist erscheinen leer e zu bleiben obwohl getAbsentTeachers() aufgerufen wird. Ich weiß das, weil in meinem ListView nichts angezeigt wird.
getAbsentTeachers() füllt die ArrayList-Strafe, wenn meine App zum ersten Mal gestartet wird, aber es scheint nicht zu funktionieren, wenn ich sie erneut aufrufen, um die ArrayList zu aktualisieren.
Irgendwelche Ideen, warum das Array nicht aktualisiert wird?
MainActivity.java: Paket uk.co.bobsmith.drawview.drawviewtest;
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
private ArrayList<Absent> absences = new ArrayList<>();
private SwipeRefreshLayout swipeContainer;
@Override
protected void onCreate(Bundle savedInstanceState) {
//---------------------INITIALISING PARSE-------------------------------
Parse.enableLocalDatastore(this);
// Add your initialization code here
Parse.initialize(new Parse.Configuration.Builder(getApplicationContext())
//Information obscured for privacy - tested and working though.
.applicationId("")
.clientKey(null)
.server("")
.build()
);
ParseUser.enableAutomaticUser();
ParseACL defaultACL = new ParseACL();
// Optionally enable public read access.
// defaultACL.setPublicReadAccess(true);
ParseACL.setDefaultACL(defaultACL, true);
ParseInstallation.getCurrentInstallation().saveInBackground();
ParsePush.subscribeInBackground("Absent");
//-----------------------CREATE ADAPTER OBJECT--------------------------------
getAbsentTeachers();
final ListView lv = (ListView)findViewById(R.id.listView);
final ArrayAdapter<Absent> adapter = new absenceArrayAdapter(this, 0, absences);
lv.setAdapter(adapter);
swipeContainer = (SwipeRefreshLayout) findViewById(R.id.swipeContainer);
// Setup refresh listener which triggers new data loading
swipeContainer.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Code to refresh the list.
absences.clear();
getAbsentTeachers();
adapter.notifyDataSetChanged();
swipeContainer.setRefreshing(false);
// Call swipeContainer.setRefreshing(false) when finished.
}
});
}
// Populates absences ArrayList with absence data
public void getAbsentTeachers() {
ParseQuery<ParseObject> query = ParseQuery.getQuery("Absences");
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
if(e == null){
for(ParseObject object : objects){
String name = String.valueOf(object.get("name"));
Log.i("Name", name);
String desc = String.valueOf(object.get("description"));
Log.i("Description", desc);
absences.add(new Absent(name, desc, "employees"));
}
} else {
Log.i("Get data from parse", "There was an error getting data!");
e.printStackTrace();
}
}
});
}
//custom ArrayAdapter
class absenceArrayAdapter extends ArrayAdapter<Absent> {
private Context context;
private List<Absent> absencesList;
public absenceArrayAdapter(Context context, int resource, ArrayList<Absent> objects) {
super(context, resource, objects);
this.context = context;
this.absencesList = objects;
}
public View getView(int position, View convertView, ViewGroup parent) {
//get the property we are displaying
Absent teacher = absencesList.get(position);
//get the inflater and inflate the XML layout for each item
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.custom_listview, null);
TextView name = (TextView) view.findViewById(R.id.name);
TextView description = (TextView) view.findViewById(R.id.description);
ImageView teacherImage = (ImageView) view.findViewById(R.id.imageView);
String teacherName = teacher.getTeacherName();
name.setText(teacherName);
int descriptionLength = teacher.getDescription().length();
if(descriptionLength >= 75){
String descriptionTrim = teacher.getDescription().substring(0, 75) + "...";
description.setText(descriptionTrim);
}else{
description.setText(teacher.getDescription());
}
return view;
}
}
}
, dass berücksichtigen Passwort zu ändern - danke! –