按下后退箭头调用onResume()。请看细节

时间:2016-04-07 04:25:51

标签: java android android-intent onresume

我在onResume()中有一个方法可以获取用户的数据,并且应该在用户启动应用时调用。这工作正常。

问题在于,例如在打开“设置”之后。当我点击/单击后退箭头时,onResume()中的方法再次被调用,用户数据开始再次被提取。

我想要的是,我希望只有在用户启动应用时才会调用该方法,而不是每次用户从设置转换回主要活动时都会调用该方法。

这里是onResume()中的MainActivity.java

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

        fetchUserData();

    }

以下是我如何过渡到Settings.java

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

请告诉我如何限制fetchUserData()仅在用户启动应用时被调用,而不是在用户通过点击/单击后退箭头从任何其他活动转换回主要活动时再次调用。

抱歉,如果问题似乎格式错误。我还是初学者。

4 个答案:

答案 0 :(得分:3)

如果您希望在活动打开时仅调用该方法一次,请在OnCreate()方法中移动它。OnResume()可以多次调用。您可以看到acttivity生命周期的文档{{3} }

答案 1 :(得分:0)

您可以通过设置一个标志/指示符来调整以下代码,以便只处理所需的返回(例如,将resume_state设置为RESUMESTATE_NOTHING,除非在启动您想要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);
}

答案 2 :(得分:0)

OnStart()onCreate()而不是onResume()中创建方法。供参考 - 请参阅此链接以更好地了解Android LifeCycle http://developer.android.com/reference/android/app/Activity.html

答案 3 :(得分:0)

如果您希望只调用一次方法,则必须将该方法放在Activity的onCreate方法中。由于始终会调用onResume,因此您将根据Android生命周期返回活动。所以只需将方法fetchUserData();替换为onCreate,如下所示:

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

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

      }