如何在其他活动中按下后更新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>);
我尝试在notifyDatasetChanged
中使用onResume()
方法,但问题仍然存在。
修改
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;
}
//在这里查看持有人类......
答案 0 :(得分:4)
首先在Adapter
中编写以下方法 public void updateList(List<Messages> mChatDetails) {
this.mChatDetails.clear();
this.mChatDetails.addAll(mChatDetails)
}
在resume中从数据库中获取数据并调用updateList(List mChatDetails)方法然后调用notifyDatasetChanged()
@Override
public void onResume() {
// fetch updated data
adapter.updateList(mChatDetails);
adapter.notifyDataSetChanged();
}
答案 1 :(得分:0)
从customerDetail
列表中删除该项,然后调用notifydatasetchanged()
答案 2 :(得分:0)
在Activity1中调用finish()
Intent intent = new Intent(getApplicationContext(), Activity2.class);
startActivity(intent);
finish();
在Activity2中覆盖backPressed
public void onBackPressed(){
Intent i = new Intent(this,AdminActivity.class);
startActivity(i);
}