Ciao come aggiornare listView
quando si preme indietro in un'altra attività. Sto usando il database, dove sto cancellando una riga particolare in uno Activity
, se premuto indietro da solo, non si sta aggiornando. Quando passo a un'altra attività o app chiusa, apri e funziona correttamente, dove viene aggiornato listView
.Come aggiornare listview quando premuto da un'altra attività Android?
Ecco il codice ..
public class FragmentLiveChats extends Fragment {
private AdapterLiveChat adapterChatHistory;
private List<LiveChatDetails> customerDetail;
private ListView mListView;
private List<LiveChatDetails> list;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
list =AAEDatabaseHelper.getLiveChatDetails(Constants.TABLE_LIVE_CHAT);
mListView = (ListView) rootView.findViewById(R.id.list_chat_history);
parseResponse();
}
private void parseResponse(){
for(int i=0;i<list.size();i++){
LiveChatDetails chatDetailsList = new LiveChatDetails();
chatDetailsList.setId(list.get(i).getId());
chatDetailsList.setFromUsername(list.get(i).getFromUsername());
chatDetailsList.setChatTime(list.get(i).getChatTime());
chatDetailsList.setLatMsg(list.get(i).getLatMsg());
customerDetail.add(chatDetailsList);
}
setValuesInAdapter();
}
@Override
public void onResume() {
// TODO Auto-generated method stub
super.onResume();
adapterChatHistory.updateList(customerDetail);
adapterChatHistory.notifyDataSetChanged();
}
private void setValuesInAdapter() {
if (adapterChatHistory == null) {
adapterChatHistory = new AdapterLiveChat(context);
}
adapterChatHistory.setExpertData(customerDetail);
if (customerDetail != null && !customerDetail.isEmpty()) {
mListView.setVisibility(View.VISIBLE);
viewNoData.setVisibility(View.GONE);
mListView.setAdapter(adapterChatHistory);
} else {
mListView.setVisibility(View.GONE);
viewNoData.setVisibility(View.VISIBLE);
}
adapterChatHistory.notifyDataSetChanged();
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
LiveChatDetails chatDetails = (LiveChatDetails) parent.getAdapter()
.getItem(position);
Log.e("chatDetails", "chat details"+chatDetails.getId());
Intent intent = new Intent(context,ActivityExpertChatView.class);
intent.putExtra(Constants.CHAT_USER_NAME, chatDetails.getId());
startActivity(intent);
}
});
}
In adattatore:
public void setExpertData(List<LiveChatDetails> mTempData) {
this.mTempData = mTempData;
}
In ExpertChatView
attività, sto cancellazione di un record e se vengo a questa schermata, vale a dire, l'attività precedente indietro premere, rimane la stessa lista e non si aggiorna. Ma quando chiudo l'app e apro, funziona perfettamente.
Nell'attività expertChatView, sto cancellando il record del nome utente.
AAEDatabaseHelper.deleteUsername(<username>);
Ho provato utilizzando notifyDatasetChanged
metodo onResume()
ma ancora lo stesso problema.
EDIT
Adapter class
public class AdapterLiveChat extends BaseAdapter {
private Context context;
private List<LiveChatDetails> mTempData;
private LayoutInflater mInflater;
private LiveChatDetails liveChatDetails;
private View adView;
private ViewHolder holder;
private String userImageUrl;
public AdapterLiveChat(Context context) {
this.context = context;
imgLoader = Picasso.with(context);
mCalendar = Calendar.getInstance();
}
public void setExpertData(List<LiveChatDetails> mTempData) {
this.mTempData = mTempData;
}
public void updateList(List<LiveChatDetails> mChatDetails) {
this.mTempData = mChatDetails;
}
@Override
public int getCount() {
return mTempData.size();
}
@Override
public LiveChatDetails getItem(int position) {
return mTempData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
liveChatDetails = getItem(position);
adView = convertView;
if (adView == null) {
holder = new ViewHolder();
adView = mInflater.inflate(R.layout.row_live_chats, null);
holder.txtName = (CustomTextView) adView
.findViewById(R.id.txt_name);
adView.setTag(holder);
} else
holder = (ViewHolder) adView.getTag();
holder.txtName.setText(liveChatDetails.getFromUsername());
return adView;
}
// vista della classe titolare qui ...
ovviamente notifyDatasetChanged non è una bacchetta magica ... se non si modificano i dati underlaying non aiuterà ... – Selvin
È necessario aggiornare anche l'elenco dati prima di chiamare NotifyDataSetChanged() – Chol
aggiungere i dati aggiornati all'adattatore listview e notificarlo su backpress –