2016-02-16 16 views
5

हाय कैसे 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; 
    } 

// दृश्य धारक वर्ग यहाँ ...

+0

जाहिर notifyDatasetChanged कुछ जादू की छड़ी नहीं है ... यदि आप इसे मदद नहीं करेगा अंतर्निहित डेटा को संशोधित नहीं है ... – Selvin

+0

आपके पास कॉल NotifyDataSetChanged() – Chol

+0

सूचीदृश्य के एडाप्टर के लिए अपने अपडेट डेटा जोड़ने और backpress –

उत्तर

3

पहले लिखने फोन

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

फिर से शुरू में डेटाबेस से डेटा लाने और फोन updateList (सूची mChatDetails) विधि तो फोन notifyDatasetChanged()

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

no..still ही में गलती कर रहा हूँ धन्यवाद। परिवर्तन नहीं हुआ है। :( – Star

+0

आप onresume ?? यह निश्चित रूप से काम करता है में अपने कोड पोस्ट कर सकते हैं कृपया। बहुत पहले जब से मैं इस दृष्टिकोण का उपयोग कर रहा हूँ। –

+0

hi..i अनुकूलक भी सहित कोड पोस्ट किया। – Star

0

customerDetail सूची से उस आइटम को हटाना और फिर एडाप्टर में विधि नीचे notifydatasetchanged()

+0

आपको बताएंगे कि कृपया होगा जहां मैं कोड – Star

संबंधित मुद्दे