嗨,如何在返回另一个活动时更新listView
。我正在使用数据库,在一个Activity
中删除特定行,如果仅按下后退键,则不会更新。当我切换到其他活动或关闭并打开应用程序时,它可以正常工作,其中listView
得到更新。
这是代码:
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);
}
});
}
在适配器中:
public void setExpertData(List<LiveChatDetails> mTempData) {
this.mTempData = mTempData;
}
在
ExpertChatView
活动中,我正在删除一条记录,如果我通过返回键回到上一个活动,它仍然保留着相同的列表,并且没有更新。但是当我关闭应用程序并重新打开时,它可以正常工作。在expertChatView活动中,我正在删除用户名记录。
AAEDatabaseHelper.deleteUsername(<username>);
我尝试在onResume()
方法中使用notifyDatasetChanged
方法,但仍然存在相同的问题。
编辑
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;
}
// 这里是视图持有者类...