我是Android的新手,我在开发过程中遇到了问题。首先,我的应用程序以一个屏幕(第一个屏幕)开始。
然后它将移动到另一个屏幕(第二个屏幕)。我的要求是:当我重新启动我的应用程序时,它应该从第二个屏幕开始。
如果有人知道如何处理,请告诉我。
答案 0 :(得分:2)
您需要在看到第一个屏幕的某个地方存储一个标志。我认为,执行此操作的最佳位置是您的应用程序共享首选项。 (参见指南主题Data Storage)
然后你需要使用旗帜。这是一种方法。将第二个屏幕设为默认启动活动。在onCreate方法中,检查是否设置了标志,如果没有,请使用请求代码> = 0为第一个屏幕调用startActivityForResult
。无论标志的值如何,请完成onCreate
通常是第二项活动。
让您的第一个活动在其onCreate
方法中设置成功的结果代码。然后,在第二个活动中,覆盖onActivityResult
,这样当它收到请求代码的成功结果时,它会设置标志。
这是有效的,因为如果您从第二个活动中调用startActivityForResult
,屏幕将显示第一个活动,而不会先闪烁第二个活动。此外,如果第一个活动由于某种原因崩溃,第二个活动将不会收到成功结果代码,并且不会设置标志,因此用户仍将看到第一个活动。
以下是一些示例代码:
第一项活动:
private static final String PREFS_NAME = "prefs";
private static final String KEY_SHOW = "show1";
private static final int REQUEST_1 = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
if (settings.getBoolean(KEY_SHOW, true)) {
Intent intent = new Intent(this, Activity1.class);
startActivityForResult(intent, REQUEST_1);
}
. . . // the rest of onCreate as normal
}
protected void onActivityResult (int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_1 && resultCode == RESULT_SUCCESS) {
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(KEY_SHOW, true);
editor.commit();
}
}
第二项活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setResult(RESULT_SUCCESS);
. . .
}
答案 1 :(得分:1)
Hello kiran我想你不想每次都开始你的第一个屏幕。因此,当您的第一个屏幕第一次显示时,您必须在 SharedPreferences 中设置值。那么每次你必须检查sharedPreferences中是否有任何值?如果有任何值,则在第一个屏幕上启动第二个屏幕。
我尝试了这个并且它有效。
修改: - 强>
我在我的应用程序中使用了这个,因为我的要求是我只需要第一次打开注册屏幕一次。然后在闪屏我写,
package com.z.z.z;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class SplashActivity extends Activity
{
RelativeLayout lerSplash;
SharedPreferences sharedPreferences;
private String strUName_pref;
private String TAG = "SplashActivity";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Log.d(TAG, "in onCreate" );
lerSplash = (RelativeLayout)findViewById(R.id.lerSplash);
Handler handler = new Handler();
handler.removeCallbacks(runnable);
handler.postDelayed(runnable, 3000L);
sharedPreferences = this.getSharedPreferences("PREFERENCE_NAME",MODE_WORLD_READABLE);
}
Runnable runnable = new Runnable()
{
public void run()
{
strUName_pref = sharedPreferences.getString("PREFERENCE_NAME", null);
if(strUName_pref != null)
{
Intent intent = new Intent(SplashActivity.this,MainTabActivity.class);
startActivity(intent);
finish();
}
else
{
Intent intent = new Intent(SplashActivity.this,RegistrationActivity.class);
startActivity(intent);
finish();
}
}
};
}
然后在RegistrationActivity中写下
package com.z.z.z;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class RegistrationActivity extends Activity
{
SharedPreferences sharedPreferences;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.registration);
Log.d(TAG, "in onCreate" );
sharedPreferences = this.getSharedPreferences("PREFERENCE_NAME",MODE_WORLD_READABLE);
SharedPreferences.Editor prefsEditor = sharedPrefs.edit();
prefsEditor.putString("SharedPreferenceValue", "YOUR_VALUE_WHICH_YOU_WANT_TO_PUT");
prefsEditor.commit();
}
}
答案 2 :(得分:0)
你到底想要什么?
如果您希望每次从应用程序退出时都启动应用程序,则必须在SharedPreference中存储值并在每个屏幕中升级它,并且在重新启动/运行时,您可以检查该值并启动该活动。
另外,我的朋友们还在上面发布了另一个选项...试试那个。
答案 3 :(得分:0)
在清单中设置默认活动后,无法更改默认活动。您可以做的是在应用程序的开头有一个默认活动(可能像启动画面)。 将此代码放在默认活动中
private SharedPreferences appPreferences = getSharedPreferences("user", MODE_PRIVATE);
final SharedPreferences.Editor editor = appPreferences.edit();
editor.putBoolean("flag", true);
editor.commit();
if(editor.getBoolean("flag",false))
{
startActivity(new Intent(DefaultActivity.this,Activity1.class));
}
else
{
startActivity(new Intent(DefaultActivity.this,Activity2.class));
}
现在在你的Activity1中使这个布尔值为假
答案 4 :(得分:0)
使用分享偏好。 1.从共享pref中获取boolean var并检查它是true还是false。 2.如果为false,则显示第一个屏幕,将变量设置为true并在共享首选项中保存变量。否则显示第二个屏幕
答案 5 :(得分:0)
我有同样的问题。我对Android开发还很陌生 - 所以我的答案可能有缺陷,但这对我有用。
转到AndroidManafest.xml文件。您的活动定义部分应如下所示:
...
<activity
android:name="com.example.test.OriginalFirstScreen"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.example.test.NewFirstScreen"
android:label="@string/title_activity_new_first_screen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
我从OldFirstScreen活动定义中删除了标记,并将其添加/添加到NewFristScreen定义中。这样做了。见下文 -
...
<activity
android:name="com.example.test.OriginalFirstScreen"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity
android:name="com.example.test.NewFirstScreen"
android:label="@string/title_activity_new_first_screen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...