2016-02-16 30 views
5

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 ...

+0

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

+0

bạn cần cập nhật cũng là danh sách dữ liệu trước khi gọi NotifyDataSetChanged() – Chol

+0

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 –

Trả lời

3

ghi đầu tiên dưới phương pháp trong Adaptor

public void updateList(List<Messages> mChatDetails) { 
    this.mChatDetails.clear(); 
    this.mChatDetails.addAll(mChatDetails) 
} 

Trong sơ yếu lý lịch lấy dữ liệu từ cơ sở dữ liệu và gọi updateList (Danh sách mChatDetails) phương pháp sau đó gọi notifyDatasetChanged()

@Override 
public void onResume() { 
    // fetch updated data 
    adapter.updateList(mChatDetails); 
    adapter.notifyDataSetChanged(); 
} 
+0

no..still cùng. đã không thay đổi. :( – Star

+0

bạn có thể xin vui lòng gửi mã của bạn trong onresume ?? chắc chắn Nó hoạt động. Từ lâu lại Tôi đang sử dụng phương pháp này. –

+0

hi..i gửi mã bao gồm bộ chuyển đổi quá. – Star

0

Xóa mục từ danh sách customerDetail và sau đó gọi notifydatasetchanged()

+0

bạn sẽ vui lòng cho thấy nơi tôi đang làm sai trong mã số – Star

Các vấn đề liên quan