Ich habe zwei Aktivitäten: 1. enthält die Listview (Activity1), 2. Details jeder Zeile in der Listview (Activity2).adapter.notifyDataSetChange() Aktualisierung der Listenansicht nach der Rückkehr von einer anderen Aktivität
Wenn der Benutzer auf eine beliebige Zeile der Listenansicht in Aktivität1 klickt, werden die entsprechenden Details in Aktivität2 angezeigt, d. H. Aktivität2 wird gestartet. Wenn der Benutzer einige Details in Activity2 bearbeitet, werden alle Änderungen auf dem Server gespeichert und wenn ich zu Activity1 zurückkehre, hole ich die neue (aktualisierte) Liste vom Server und möchte die UI (Listview) von Activity1 aktualisieren. Aber das passiert nicht. Ich tue das folgende Listenansicht zu aktualisieren:
@Override
protected void onStart() {
super.onStart();
Toast.makeText(this, "onStart", Toast.LENGTH_LONG).show();
PetService petService = FactoryMaker.getFactory(AppConstants.PET_SERVICE).getPetServiceImpl(AppConstants.PARSE_IMPL, this);
//pets = petService.getPetList();
//adapter = new PetListArrayAdapter(getApplicationContext(),R.layout.pet_list_item, pets);
//petListView.setAdapter(adapter);
pets = petService.getPetList();
adapter.clear();
adapter.addAll(pets);
adapter.notifyDataSetChanged();
if(pets.size()>0) {
retrieve.setVisibility(View.INVISIBLE);
}else{
retrieve.setVisibility(View.VISIBLE);
}
}
Allerdings, wenn ich den Adapter wieder eingestellt (wie die drei Zeilen, die ich kommentiert out), wird die Listenansicht nach Bedarf aktualisiert, aber mit notifyDataSetChanged(), seine nicht funktioniert. Ich habe alle Fragen für dieses Problem verfolgt, aber nichts scheint zu funktionieren. Mein Adapter erstreckt sich von ArrayAdapter. Bitte helfen Sie!
Mein Adapter Implementierung:
public class PetListArrayAdapter extends ArrayAdapter<Pet> {
private final String TAG="PetListArrayAdapter";
private List<Pet> pets = null;
private Context applicationContext =null;
public PetListArrayAdapter(Context context, int resource, List<Pet> petList) {
super(context, resource, petList);
pets = petList;
applicationContext = context;
}
@Override
public int getCount(){
int size = 0;
if(pets!=null) {
size = pets.size();
}
return size+1;
}
@Override
public int getItemViewType(int position) {
return (position == 0) ? 0 : 1;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.d(TAG, "getView for position" + position);
int type = getItemViewType(position);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(convertView==null) {
if(type==1) {
convertView = inflater.inflate(R.layout.pet_list_item, null);
TextView t = (TextView)convertView.findViewById(R.id.petName);
final Pet pet = pets.get(position-1);
Log.d(TAG, "pet:" + pet);
t.setText(pet.getName());
ImageView petImage =(ImageView)convertView.findViewById(R.id.petImage);
String imageUrl = pet.getThumbnailUrl();
//if(petImage.getDrawable()==null) {
if (imageUrl != null) {
Log.d(TAG, "Loading Image for position" + position);
new ImageDownloader(petImage).execute(imageUrl);
}
/*}else{
Log.d(TAG, "Image present for position" + position);
}*/
}else if (type==0){
convertView = inflater.inflate(R.layout.add_pet, null);
}
}
return convertView;
}
}
Zuerst ist die Anfrage auf einem Hintergrundthread oder ui thread ? Zweitens, was ist die Adapter-Implementierung, können Sie es zeigen? –
Die Anfrage befindet sich im UI-Thread. –
Wie eine Anfrage an einen Server auf UI-Thread sein kann, bekomme ich nicht. –