2016-04-07 8 views
0

onResume()にはユーザーのデータを取得するメソッドがあり、ユーザーがそのアプリケーションを起動すると呼び出されるはずです。これはうまくいきます。戻る矢印を押すとonResume()が呼び出されます。詳細をご覧ください

問題は、たとえば、バック矢印をタップ/クリックしたときに「設定」を開いた後に、onResume()のメソッドが再度呼び出され、ユーザーデータが再び取得されるようになることです。

私が欲しいのは、ユーザーが設定をメインアクティビティに戻すたびにではなく、ユーザーがアプリを起動したときに呼び出されるようにしたいということです。ここで

MainActivity.javaonResume()です:

@Override 
    protected void onResume() { 
     super.onResume(); 

     fetchUserData(); 

    } 

は、ここで私はSettings.javaへの移行方法は次のとおりです。

Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class); 
startActivity(settingsIntent); 

私は、ユーザーがアプリを起動したときにのみfetchUserData()が呼び出されるために制限することができますどのように私を聞かせてください。戻る矢印をタップ/クリックして、他のアクティビティからメインアクティビティに戻るときには、もう一度やり直してください。

申し訳ありませんが、質問はフォーマットが間違っているようです。私はまだ初心者です。

+0

をあなたはそれが初めてでその活動の天候に土地や他の活動 –

+0

から戻って来て初のアクティビティのライフサイクルを読んだときにonResumeが常に呼ばれる - >のhttp: //developer.android.com/training/basics/activity-lifecycle/stopping.htmlこれを読んだ後、あなたの質問が間違っていると自動的に理解しています –

+0

@RakshitNawaniは私が望むものを達成するための方法はありませんか? –

答えて

3

アクティビティのオープン時に一度だけメソッドを呼び出す場合は、OnCreate()メソッド内を移動します。 OnResume()は、起動時を除いてRESUMESTATE_NOTHINGに例えば設定resume_state(acttivityライフサイクルhere

0

のドキュメントを見ることができる唯一のリターンが処理されたかったように、あなたはフラグ/指標を設定することで、次のコードを適応させることができ、いくつかのtimes.You呼び出すことができます意図された後、あなたはfetchUserDataにしたい: -

public class AisleListByCursorActivity extends AppCompatActivity { 

public final static int RESUMESTATE_NOTHING = 0; 
public final static int RESUMESTATE_AISLEADD = 1; 
public final static int RESUMESTATE_AISLESTOCK = 2; 
public final static int RESUMESTATE_AISLEDELETE =3; 
public final static int RESUMESTATE_AISLEUPDATE = 4; 
public int resume_state = RESUMESTATE_NOTHING; 
public ShopsCursorAdapter currentsca; 
public AislesCursorAdapter currentaca; 
public ShopListSpinnerAdapter currentslspa; 
public long currentshopid; 

private final static String THIS_ACTIVITY = "AisleListByCursorActivity"; 
private final ShopperDBHelper shopperdb = new ShopperDBHelper(this,null, null, 1); 

private ListView aisleslistview; 
private Cursor csr; 
private int shopid = 0; 

protected void onResume() { 
    super.onResume(); 
    switch (resume_state) { 
     case RESUMESTATE_AISLEADD:case RESUMESTATE_AISLEUPDATE: { 
      Cursor csr = shopperdb.getAislesPerShopAsCursor(currentshopid); 
      currentaca.swapCursor(csr); 
      resume_state = RESUMESTATE_NOTHING; 
      break; 
     } 
     default: { 
      resume_state = RESUMESTATE_NOTHING; 
     } 
    } 
} 

........

public void aalbcadd(View view) { 
    resume_state = RESUMESTATE_AISLEADD; 
    Intent intent = new Intent(this,AisleAddActivity.class); 
    intent.putExtra("Caller",THIS_ACTIVITY); 
    intent.putExtra("SHOPID", currentshopid); 
    startActivity(intent); 
} 
0

あなたのメソッドを一度しか呼び出さない場合は、そのメソッドをActivityのメソッドonCreateに入れなければなりません。 onResumeが常に呼び出されるため、Androidのライフサイクルごとにアクティビティに戻ってきます。だから、以下のようonCreateにあなたの方法fetchUserData();を置き換える:

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_app_list); 
      fetchUserData(); 
    } 

    @Override 
     protected void onResume() { 
     super.onResume(); 

     } 
関連する問題