Java onResume()在按下后退箭头时被调用。请看详情

Java onResume()在按下后退箭头时被调用。请看详情,java,android,android-intent,onresume,Java,Android,Android Intent,Onresume,我在onResume()中有一个方法,它获取用户的数据,并在用户启动应用程序时调用。这很好用 问题是,例如,当我点击/单击后退箭头打开“设置”后,onResume()中的方法再次被调用,用户数据再次开始被提取 我想要的是,我希望该方法仅在用户启动应用程序时调用,而不是每次用户从设置转换回主活动时调用 以下是MainActivity.java中的onResume(): @Override protected void onResume() { super.onResume(

我在
onResume()
中有一个方法,它获取用户的数据,并在用户启动应用程序时调用。这很好用

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

我想要的是,我希望该方法仅在用户启动应用程序时调用,而不是每次用户从设置转换回主活动时调用

以下是
MainActivity.java
中的
onResume()

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

        fetchUserData();

    }
Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(settingsIntent);
下面是我如何转换到
Settings.java

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

        fetchUserData();

    }
Intent settingsIntent = new Intent(MainActivity.this, SettingsActivity.class);
startActivity(settingsIntent);
请告诉我如何限制
fetchUserData()


抱歉,如果问题的格式不正确。我在这里还是个初学者。

如果希望在活动打开时只调用一次该方法,请将其移动到
OnCreate()
方法中。
OnResume()
可以多次调用。如果希望在活动打开时只调用一次方法,可以查看activity lifecycle的文档。
OnResume()将其移到
OnCreate()方法中。
OnResume()
可以多次调用。您可以查看Activity lifecycle的文档

您可以调整以下代码,方法是设置一个标志/指示符,以便只处理想要的返回(例如,将resume_state设置为RESUMESTATE_NOTHING,除非在启动intent之后您想要获取用户数据:-

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);
}

您可以调整以下代码,方法是设置一个标志/指示符,以便只处理想要的返回(例如,将resume_state设置为RESUMESTATE_NOTHING,除非在启动一个intent之后您希望获取UserData:-

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);
}

OnStart()
onCreate()
中创建方法,而不是在
onResume()
中创建方法。参考-请查看此链接以更好地了解Android生命周期
OnStart()
onCreate()
中创建方法,而不是
onResume()
。供参考-请查看此链接以更好地了解Android生命周期

如果您希望只调用一次您的方法,则必须将该方法放入活动的
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();

      }

如果您希望只调用一次方法,则必须将该方法放入活动的
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();

      }

onResume总是在您首次登录该活动或从其他活动返回时调用。首先阅读活动生命周期->阅读此内容后,您会自动理解您的问题是错误的尝试将fetchUserData()放入onCreate()中。它将只调用一次。设置良好的fetchUserData();你的内心onCreate@HammadNasir您可以将代码从onResume()移动到onCreate()方法。onCreate()方法方法只被调用一次,直到整个活动被销毁。无论是第一次登录该活动还是从另一个活动返回,onResume始终被调用首先阅读活动生命周期->阅读此内容后,您会自动理解您的问题是错误的尝试将fetchUserData()放入onCreate()中。它将只调用一次。请在onCreate@HammadNasir您可以将代码从onResume()移动到onCreate()方法。onCreate()方法只被调用一次,直到整个活动被销毁。