我在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()
仅在用户启动应用时被调用,而不是在用户通过点击/单击后退箭头从任何其他活动转换回主要活动时再次调用。
抱歉,如果问题似乎格式错误。我还是初学者。
答案 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();
}