- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在开始按问题进行描述之前,我想指出我知道其他线程在问这个问题,但是对我来说没有一个能够解决我的问题。
之前提出的问题和我的问题之间的区别在于,我在主 Activity 中有初始屏幕代码,而在另一个 Activity 中没有,所以我没有用于此的布局 XML 文件。
所以,问题是,我只想在应用程序启动时显示启动画面,这是通过以下代码完美完成的,但是当 main activity
(包含启动画面代码)时被另一个使用 Intent
的 Activity 调用,启动画面再次显示。
所以,首先我尝试使用 flag
变量,在创建 Activity 时初始化 0
并在显示一次启动画面时将其递增 1。但我发现它不会工作,因为在创建 Activity 时它总是 0
。
所以,现在我正尝试从其他 Activity 传递一个字符串,并尝试再次阻止启动画面,如以下代码所示:
public class Registration extends ActionBarActivity {
public final static String EXTRA_MESSAGE = "com.kaushal.myapplication.MESSAGE";
DatabaseHelper myDb;
EditText username,password;
private ImageView splashImageView;
boolean splashloading = false;
int flag=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
String message = null;
Intent intent0 = getIntent();
message = intent0.getStringExtra(Registration.EXTRA_MESSAGE);//string from another activity.
if(!message.equals("signup has called me")) { //splash screen code in `if`
splashImageView = new ImageView(this);
//splashImageView.setBackgroundColor();
splashImageView.setImageResource(R.drawable.sexy);
setContentView(splashImageView);
splashloading = false;
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
splashloading = false;
setContentView(R.layout.activity_registration);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
}
}, 3000);
flag++;
}
if(flag==0){
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
}
myDb = new DatabaseHelper(this);
}
}
这里 Registration
是我的主要 Activity 的名称,它在应用程序启动时启动。
另一个名为 sign Up
的 Activity 的方法代码,它传递一个字符串:
public void backToRegistration(View view){
Intent intent0 = new Intent(this,Registration.class);
intent0.putExtra(EXTRA_MESSAGE, "signup has called me");
startActivity(intent0);
}
这个方法有什么问题?应用程序在启动后立即崩溃。
最佳答案
因此,在 Intent 中使用字符串作为这样的标志存在许多问题。字符串并不是真正为它设置的。开销比简单的原始 boolean 标志多一点。
按照您当前尝试的方式执行此操作
将您的 onCreate
代码更改为此
super.onCreate(savedInstanceState);
Intent intent0 = getIntent();
boolean showSplash = getIntent().getBooleanExtra(Registration.FLAG_KEY), true);
handleSplashScreen(showSplash);
并添加这个方法,我们将以某种递归的方式使用它来处理启动画面的显示。
private void handleSplashScreen(boolean showSplash){
if(showSplash) { //splash screen code in `if`
splashImageView = new ImageView(this);
//splashImageView.setBackgroundColor();
splashImageView.setImageResource(R.drawable.sexy);
setContentView(splashImageView);
splashloading = false;
Handler h = new Handler();
h.postDelayed(new Runnable() {
public void run() {
handleSplashScreen(false);
}
}, 3000);
}
else{
splashloading = false;
setContentView(R.layout.activity_registration);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
}
}
然后,当您从另一个 Activity 打开此 Activity 时
public void backToRegistration(View view){
Intent intent0 = new Intent(this,Registration.class);
intent0.putExtra(FLAG_KEY, false);
startActivity(intent0);
}
其中 FLAG_KEY
是 private static FLAG_KEY = com.kaushal.myapplication.FLAG;
并替换 EXTRA_MESSAGE
字符串。
我建议如何做
现在,话说回来,这根本不是我推荐的做法。您应该只拥有一个在启动时调用并重定向到您的 Registration
MainActivity 的 SplashScreenActivity。这摆脱了具有两个不同布局、标志等的 Activity 的卷积。
public class SplashScreenActivity extends Activity{
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
new Handler().postDelayed(new Runnable(){
@Override
public void run(){
startActivity(new Intent(SplashScreenActivity.this, MainActivity.class);
SplashScreenActivity.this.finish();
}
}, 3000);
}
}
R.layout.activity_splash 看起来像这样
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="R.drawable.sexy"
android:scaleType="centerInside" />
然后你可以像这样拥有 MainActivity
public class MainActivity extends ActionBarActivity{
// Variables here
...
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
username = (EditText) findViewById(R.id.username);
password = (EditText) findViewById(R.id.password);
}
// Other methods
...
}
最后,只需进入 list 并对其进行更新,以便在启动时显示新创建的 SplashScreenActivity,并确保 MainActivity 仍被正确声明。
<activity
android:name=".SplashScreenActivity"
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=".MainActivity"/>
没有更多的标志,没有更多的逻辑,没有更多的问题。它在启动时加载启动画面,仅此而已。 Activity 在通过 Intent 后完成,因此它不再位于堆栈中。一切都很好。其他问题处理这样的事情的原因是这是获得启动画面的推荐方法。
关于java - 仅在应用程序启动时显示启动画面,而不是每次调用包含启动画面代码的 Activity 时显示启动画面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36452478/
我有一个表,用于测量数据集中两个不同值的分布百分比(我有一个计数,替换为 Percentage )。我只想在仪表板中发布 85% 的值。这样做的步骤是什么? .现在,如果我过滤掉 NO 值, YES
我想平均N通过Type对于 Inst 的值 我的数据设置为: Type, Inst, N A, A1, 4 A, A1, 13 A, A1, 13 A, A2, 4 A, A3, 5 B, B1, 4
当我使用 Node 的 http2 库(仅支持 HTTPS,不支持 HTTP)进行开发时,当我在 Chrome 中打开 localhost 时,我会看到一个警告屏幕: Your connection
我想创建一个具有响应式布局的导航栏菜单。当网站显示在显示器上时,我想播放导航栏。当网站在手机上显示时,我会显示最终显示导航栏的菜单图标。 我该怎么做? 最佳答案 试试这个,在移动设备上,导航栏不仅会显
我聘请了一名程序员为我创建一个 iPhone 应用程序。该应用程序的目的是拍照并将其上传到服务器。我们想制作一个特殊用途的屏幕,以便在上传照片之前查看照片。这个专门开发的屏幕将具有至关重要的缩放功能。
我在 Tableau 上有一个我无法解决的简单问题。 我想显示一个图表,显示随时间变化的度量。我想将用户通过参数选择的一个客户端与未选择的所有其他客户端进行比较。该图将显示具有 2 种不同颜色的两条线
我使用 Python 脚本从 3 个不同的 RDS 执行一系列复杂查询,然后将数据导出到一个 CSV 文件中。我现在正在尝试找到一种方法,每周将使用这些数据的仪表板自动发布到 Tableau 服务器中
我在工作中使用 tableau 来处理各种数据类型,包括敏感的个人数据,这些数据只能以聚合格式共享。我试图找到一种方法来保护私有(private)信息,方法是在单元格值小于 5 时隐藏它。这样,当用户
我最近开始在网站上嵌入 Tableau 可视化效果,并遇到了在浏览器中直接使用 Control + P 打印它们的问题。大多数完全扭曲,如果有的话。我做了一些挖掘,发现这是一个已知问题: http:/
例如,此 URL 包含十几个项目:https://tableautest.domain.uk/t/CustomerSharing/view/projects 在每个项目中都有几个工作簿。每个工作簿中都
我正在研究如何使用 Tableau 连接到 Cloudera Hadoop。我提供服务器和端口详细信息并使用“Impala”进行连接。我能够成功连接,选择默认模式并选择所需的表。 在此之后,当我将维度
我正在尝试将 Tableau 工作表嵌入到我的 ReactJS 应用程序中。我有一个包含报告名称列表的菜单(在 react 中),当单击菜单项时,它会更新包含报告名称的状态。我决定使用 tableau
我有以下问题!我有一个这样的表: Data Source 我想创建一个可以获取 apl_id 的字段(我想这是一个字段),有一些我想要的 service_offered。 上表中的示例。如果我想要只有
我有一个航类延误数据电子表格,我正在处理一个显示每个机场总延误时间的工作表。我想过滤维度“机场”,即根据每个机场的起飞次数创建机场类别,“小型”、“中型”和“大型”,这是通过计算维度“航类号”计算得出
我想创建一个带有过滤器的表格,用于选择和比较事物: 假设我有一个变量 Var,包含值 A、B、C、D、E。我想要一个过滤器,以便用户可以选择 A B C D 之一,同时 E 始终被选中。这样选中的E和
我是一名优秀的程序员,十分优秀!