पिछला बटन और ताज़ा गतिविधि


84

अगर हमारे पास दो गतिविधियाँ हैं:

  1. फ़ाइलों की सूची और अंतिम संशोधित समय
  2. फ़ाइल संपादन गतिविधि

एक उपयोगकर्ता सूची से एक फ़ाइल का चयन करता है और फ़ाइल संपादन गतिविधि में ले जाया जाता है। जब संपादन किया जाता है, तो उपयोगकर्ता फ़ाइल सूची पर वापस जाने के लिए बैक बटन दबाता है।

सूची को फिर से लोड नहीं किया गया है और इसलिए संशोधित समय के लिए बस संपादित की गई फ़ाइलों के लिए एक गलत मान प्रदर्शित किया गया है।

बैक बटन दबाने के बाद फ़ाइल सूची को रीफ्रेश करने का उचित तरीका क्या है?

यह उदाहरण मानता है कि किसी भी डेटाबेस का उपयोग नहीं किया जा रहा है, बस एक ArrayAdapter है।


1
onRestart () को बेहतर काम करना चाहिए। onResume () को दो बार कहा जाएगा, और onRestart () केवल तभी कॉल किया जाएगा जब आप बैक बटन दबाएंगे।
— सारा सकामोटो

जवाबों:


108

एक विकल्प यह होगा कि आप अपनी पहली गतिविधि का उपयोग करें।

@Override
public void onResume()
    {  // After a pause OR at startup
    super.onResume();
    //Refresh your stuff here
     }

या आप परिणाम के लिए गतिविधि शुरू कर सकते हैं:

Intent i = new Intent(this, SecondActivity.class);
startActivityForResult(i, 1);

यदि आप डेटा वापस भेजना चाहते हैं, तो दूसरी गतिविधि में:

 Intent returnIntent = new Intent();
 returnIntent.putExtra("result",result);
 setResult(RESULT_OK,returnIntent);     
 finish();

यदि आप डेटा वापस नहीं करना चाहते हैं:

Intent returnIntent = new Intent();
setResult(RESULT_CANCELED, returnIntent);        
finish();

अब अपने FirstActivity क्लास में onActivityResult()विधि के लिए निम्नलिखित कोड लिखें

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  if (requestCode == 1) {

     if(resultCode == RESULT_OK){      
         //Update List         
     }
     if (resultCode == RESULT_CANCELED) {    
         //Do nothing?
     }
  }
}//onActivityResult

क्या होगा अगर मैं वर्तमान गतिविधि को समाप्त नहीं करना चाहता हूं और पिछली गतिविधि को अद्यतन करना चाहता
— हूं

@Aza_Be onResumeको मेरे लिए नहीं बुलाया गया, कोई विचार क्यों? ( मैंने कोशिश की onRestartऔर onPauseभी, लेकिन उनमें से किसी ने भी फोन नहीं किया )
— मेहदी देहगानी

मेरे मामले में, मैं फ्रैगमेंट से एक्टिविटी में गया हूं। इसलिए जब गतिविधि से खंडन पर वापस आ रहे हैं, क्योंकि अन्य उत्तर onRestart () का उल्लेख कर रहे हैं जो कि Fragment द्वारा निहित नहीं है, इसलिए, इस उत्तर ने मेरे लिए काम किया। एक टुकड़ा के लिए, आप onResume () का उपयोग कर सकते हैं।
— फिरोज खान

39

मुझे लगता है कि onRestart () इसके लिए बेहतर काम करता है।

@Override
public void onRestart() { 
    super.onRestart();
    //When BACK BUTTON is pressed, the activity on the stack is restarted
    //Do what you want on the refresh procedure here
}

जब आप गतिविधि फिर से शुरू की जाती है तो आप कोड कर सकते हैं कि आप क्या कर सकते हैं (ऑनर बटन दबाया गया है।

उदाहरण के लिए, यदि आप वही कार्य करना चाहते हैं जो आप ऑनक्रीट () में करते हैं, तो कोड को onRestart () में चिपकाएँ (जैसे कि अद्यतन किए गए मानों के साथ UI का पुनर्निर्माण करना)।


7
यह मामूली बात है, लेकिन मैं है यह कहना: जाहिर है यह एक अलग विधि आप तो दोनों OnCreate () के साथ-साथ onRestart () के बजाय प्रतिलिपि से चिपकाने आह्वान है कि में अपने OnCreate () कोड स्थानांतरित करने के लिए बेहतर होगा।
— रिकार्डो वैन डेन ब्रोक

आप onCreate () का उपयोग केवल विचारों को भड़काने के लिए कर सकते हैं और वैश्विक चर को त्वरित कर सकते हैं और उन्हें सेट (/) असाइन करने के लिए onStart () का उपयोग कर सकते हैं। इस प्रकार आपकी इनिट () या (जो भी आप इसे कॉल करना चाहते हैं) जब भी गतिविधि शुरू होगी, उसे कॉल किया जाएगा; पर onCreate के बाद () या onRestart () के बाद।
— jwehrle

यह वास्तव में उपयोगी है यदि आपको अपनी गतिविधियों की आवश्यकता है ViewModel को फिर से संगठित किया जाए। इसे फिर से डेटाबेस से
— लाएं

34

मुख्य में:

@Override
public void onRestart()
{
    super.onRestart();
    finish();
    startActivity(getIntent());
}

मैं अनुमान लगा रहा हूं कि यह वर्तमान गतिविधि के लिए जाता है न कि पिछली गतिविधि के लिए?
— Si8

1
मेरे पास एक ही मुद्दा था, सिवाय मेरे एक फ्रैगमेंट नहीं गतिविधि थी। इस प्रकार, मैं यहां सलाह का पालन करता हूं और इसने काम किया: stackoverflow.com/questions/35039512/…
— डेविड सी।

8

मैं onResume()गतिविधि नंबर 1 में विधि को ओवरराइड करने की सलाह दूंगा , और इसमें आपके सरणी एडाप्टर को ताज़ा करने के लिए कोड शामिल है, यह उपयोग करके किया जाता है[yourListViewAdapater].notifyDataSetChanged();

अगर आपको सूची को ताज़ा करने में समस्या हो रही है, तो इसे पढ़ें: Android सूची दृश्य ताज़ा करें


2

यदि आप पिछली गतिविधि को ताज़ा करना चाहते हैं, तो यह समाधान काम करना चाहिए:

पिछली गतिविधि में जहां आप ताज़ा करना चाहते हैं:

@Override
public void onRestart()
{
    super.onRestart();
    // do some stuff here
}

1
private Cursor getAllFavorites() {
    return mDb.query(DocsDsctnContract.DocsDsctnEntry.Description_Table_Name,
            null,
            null,
            null,
            null,
            null,
            DocsDsctnContract.DocsDsctnEntry.COLUMN_Timest);
}
@Override
public void onResume()
{  // After a pause OR at startup
    super.onResume();
    mAdapter.swapCursor(getAllFavorites());
    mAdapter.notifyDataSetChanged();

}

public void swapCursor(Cursor newCursor){
    if (mCursor!=null) mCursor.close();
    mCursor = newCursor;
    if (newCursor != null){
        mAdapter.notifyDataSetChanged();
    }
}

मेरे पास पसंदीदा श्रेणी है इसलिए जब मैं पसंदीदा से आइटम पर क्लिक करता हूं तो ऐसी जानकारी दिखाई देती है और यदि मैं इसके विपरीत है - तो यह आइटम पसंदीदा से हटा दिया जाना चाहिए: इसके लिए मैं डेटाबेस को ताज़ा करता हूं और इसे एडाप्टर (recyclerview के लिए) पर सेट करता हूं [मैं आपको शुभकामना देता हूं मेरी समस्या और समाधान को समझेंगे]


कुछ स्पष्टीकरण जोड़ने पर विचार करें
— Ghan

1
 @Override
protected void onRestart() {
    super.onRestart();
    finish();
    overridePendingTransition(0, 0);
    startActivity(getIntent());
    overridePendingTransition(0, 0);
}

पिछली गतिविधि में इस कोड का उपयोग करें। जब आप वापस बटन दबाकर वापस आते हैं तो यह एक सुचारु परिवर्तन करेगा और गतिविधि को फिर से लोड करेगा।


क्या आप कोड में कुछ विवरण जोड़ सकते हैं और पोस्ट के लिए धन्यवाद कर सकते हैं।
— नेल्स

0

यदि संपादन गतिविधि (onActivityResult के साथ) से कॉलबैक को संभालना नहीं है, तो मैं आपके द्वारा बताए गए तर्क को onStart (या संभवतः onRestart) में डाल दूंगा, क्योंकि इसे onResume में ऐसा लगता है कि यह ओवरकिल की तरह लगता है, यह देखते हुए कि बदलाव केवल बाद में हो रहे हैं onStop।

किसी भी दर पर, गतिविधि जीवन चक्र से परिचित हों । इसके अलावा, onRestoreInstanceState और onSaveInstanceState विधियों पर ध्यान दें, जो सुंदर जीवनचक्र आरेख में दिखाई नहीं देते हैं।

(इसके अलावा, यह समीक्षा करने के लायक है कि नोटपैड ट्यूटोरियल कैसे संभालता है कि आप क्या कर रहे हैं, हालांकि यह एक डेटाबेस का उपयोग करता है।)



0

इसे इस्तेमाल करे

 public void refreshActivity() {
    Intent i = new Intent(this, MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    finish();

}

या फ्रागमेंट में

  public void refreshActivity() {
    Intent i = new Intent(getActivity(), MainActivity.class);
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(i);
    finish();

}

और इस विधि को अपने onBackPressed () की तरह जोड़ें

  @Override
public void onBackPressed() {      
        refreshActivity();
        super.onBackPressed();
    }
}

बस...


0
@Override
public void onBackPressed() {
    Intent intent = new Intent(this,DesiredActivity.class);
    startActivity(intent);
    super.onBackPressed();
}

यह प्रश्न कुछ साल पुराना है और प्रदान किए गए उत्तर को निम्न गुणवत्ता पोस्ट के रूप में समीक्षा के लिए चिह्नित किया गया था। यहाँ मैं कैसे एक अच्छा जवाब लिखने के लिए कुछ दिशानिर्देश हैं ? । अन्य उत्तर हैं जो ओपी के प्रश्न प्रदान करते हैं, और उन्हें कुछ समय पहले पोस्ट किया गया था। उत्तर पोस्ट करते समय, कृपया सुनिश्चित करें कि आप या तो एक नया समाधान जोड़ते हैं, या काफी बेहतर व्याख्या करते हैं, खासकर पुराने प्रश्नों का उत्तर देते समय।
— help-info.de
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.