Xin chào cách cập nhật listView
khi quay lại trong một hoạt động khác. Tôi đang sử dụng cơ sở dữ liệu, trong đó tôi xóa hàng cụ thể trong một Activity
, nếu bạn nhấn một lần thì nó không được cập nhật. Khi tôi chuyển sang một số hoạt động hoặc ứng dụng khác đã đóng và mở nó hoạt động tốt khi listView
được cập nhật.Làm thế nào để cập nhật listview khi quay lại ép từ một android hoạt động?
Đây là mã ..
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);
}
});
}
Trong adapter:
public void setExpertData(List<LiveChatDetails> mTempData) {
this.mTempData = mTempData;
}
Trong ExpertChatView
hoạt động, tôi đang xóa một bản ghi và nếu tôi đến với màn hình này, tức là hoạt động trước đó bởi trở lại báo chí, nó vẫn là cùng một danh sách và nó không cập nhật. Nhưng khi tôi đóng ứng dụng và mở, nó hoạt động tốt.
Trong hoạt động expertChatView, tôi đang xóa kỷ lục tên người dùng.
AAEDatabaseHelper.deleteUsername(<username>);
tôi đã cố gắng bằng cách sử dụng phương pháp notifyDatasetChanged
trong onResume()
nhưng vẫn cùng một vấn đề.
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;
}
// xem người giữ lớp đây ...
rõ ràng notifyDatasetChanged không phải là một cây đũa thần ... nếu bạn không sửa đổi dữ liệu underlaying nó sẽ không giúp ... – Selvin
bạn cần cập nhật cũng là danh sách dữ liệu trước khi gọi NotifyDataSetChanged() – Chol
thêm dữ liệu cập nhật của bạn để chuyển đổi listview và hơn thông báo nó trên backpress –