Ich habe eine Liste, die vom Benutzer aktualisiert werden kann, aber notifyDataSetChanged()
funktioniert nicht auf dem Adapter, der mit der listView
verbunden ist. Ich benutze es in einem Fragment. Database wird aktualisiert, der Adpater jedoch nicht. Folgende ist meine Umsetzung:ArrayAdapter.NotifyDataSetChanged() funktioniert nicht?
Mein Haupt Fargment:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myArrayList = new ArrayList<myList>();
myArrayList = Database.getSharedObject(getActivity()).getMyList();
if (myArrayList != null && myArrayList.size() > 0) {
adapter = new myListAdapter(getActivity(), 0, myArrayList);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.mainfragment, container, false);
myListView = (ListView) v.findViewById(R.id.my_list_view);
myListView.setOnItemClickListener(this);
if (adapter != null) {
myListView.setAdapter(adapter);
}
return v;
}
Nach einigen Navigationsprozessliste aktualisiert wird und in meinem onResume()
Methode, die ich die aktualisierte Liste aus der Datenbank erhalten und notifyDatasetChanged()
Methode aufrufen, die nicht aktualisiert meine Ansicht, jedoch wird das entsprechende Array aus der DB aktualisiert.
@Override
public void onResume() {
super.onResume();
myArrayList = Database.getSharedObject(getActivity()).getMyList();
adapter.setItems (myArrayList);
adapter.notifyDataSetChanged();
}
MyListAdapter
public class MyListAdapter extends ArrayAdapter<Message> {
private ArrayList<Message> myList;
/* Context */
private Context context;
public void setItems (ArrayList<Message> myList) {
this.myList = myList;
}
public MyListAdapter (Context context, int textViewResourceId, ArrayList<Message> myList) {
super(context, textViewResourceId, myList);
this.context = context;
this.myList = myList;
}
@Override
public View getView (int position, View v, ViewGroup parent) {
// Keeps reference to avoid future findViewById()
MyViewHolder viewHolder;
if (v == null) {
LayoutInflater li = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.list_row, parent, false);
viewHolder = new MyViewHolder();
viewHolder.txtImage = (ImageView) v.findViewById(R.id.message_icon);
viewHolder.txtMessage = (TextView) v.findViewById(R.id.message);
viewHolder.txtDate = (TextView) v.findViewById(R.id.date);
v.setTag(viewHolder);
} else {
viewHolder = (MyViewHolder) v.getTag();
}
Message myMessage = new Message();
myMessage = myList.get(position);
if (myMessage != null) {
viewHolder.txtMessage.setText(myMessage.getText());
viewHolder.txtDate.setText(myMessage.getDate());
}
return v;
}
static class MyViewHolder {
ImageView txtImage;
TextView txtMessage;
TextView txtDate;
}
}
Jeder Gedanke auf, was nicht in Ordnung ist? Warum wird listview nicht aktualisiert? Irgendwelche Hilfe wird geschätzt.
Ist das 'adapter.setItems' einige benutzerdefinierte Methode, die Sie gemacht? – Sean
@Sean ja..Es ist eine benutzerdefinierte Methode. –
post myListAdapter – Blackbelt