相关疑难解决方法(0)

你如何使用Intent.FLAG_ACTIVITY_CLEAR_TOP清除活动堆栈?

我已经阅读了几篇关于使用它的帖子,但必须遗漏一些因为它不适合我.我的活动A在清单中有launchmode ="singleTop".它启动活动B,启动模式="singleInstance".活动B打开浏览器并接收和意图返回,这就是为什么它是singleInstance.我试图覆盖后退按钮,以便用户被发送回活动A,然后可以按Back返回活动,而不是再次返回活动B.

// activity B
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
 if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
  && keyCode == KeyEvent.KEYCODE_BACK
  && event.getRepeatCount() == 0) onBackPressed();
 return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
 startActivity(new Intent(this, UI.class)
 .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK));
 return;
}
Run Code Online (Sandbox Code Playgroud)

从浏览器返回后,堆栈是...... A,B,浏览器,B

我希望这段代码能够将堆栈更改为...... A ...以便再次按下后再将用户带回主屏幕.

相反,它似乎将堆栈更改为... A,B,浏览器,B,A ......好像那些标志不在那里.

我尝试在startActivity之后调用活动B中的finish(),但后面的按钮再次将我带回浏览器!

我错过了什么?谢谢!

java android android-manifest android-intent android-activity

76
推荐指数
5
解决办法
17万
查看次数

为什么FLAG_ACTIVITY_CLEAR_TOP不起作用?

正如标题所说,为什么intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)不会有效?

我有3个活动让我们说A,B和C.

当我尝试使用代码从C启动活动A时:

Intent i = new Intent(this, A.class);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
Run Code Online (Sandbox Code Playgroud)

它只是启动活动A但不清除顶部.-_-

我也试过用setFlags().

我在这个问题上阅读了关于SO的不同问题,但我找不到正确的答案.> _ <

有人请帮忙!

编辑

@codeMagic请求的活动'A'中onBackPressed()的代码.

@Override
public void onBackPressed(){
    if(wvLogin.canGoBack())
        wvLogin.goBack();
    else
        super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)

android android-intent android-activity

15
推荐指数
3
解决办法
5万
查看次数

有没有更好的方法来完成另一个活动的活动?

我有 3 个活动 FirstActivity、SecondActivity 和 ThirdActivity。FirstActivity 导致 SecondActivity 导致 ThirdActivity。我希望能够在 FirstActivity 和 SecondActivity 、 FirstActivity 和 ThirdActivity 之间来回移动。

这是我实施的:

第一活动:

在 FirstActivity 我有一个 onClick 方法“goToSecondActivity”,它启动 SecondActivity

 public void goToSecondActivity(View view){
        Intent i = new Intent(this, SecondActivity.class);
        final EditText firstText = (EditText) findViewById(R.id.firstText);
        String userMessage = firstText.getText().toString();
        if(!"".equals(userMessage))
        i.putExtra("firstMessage",userMessage);

        startActivity(i);
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

第二个活动:

再次在 SecondActivity 中,我有一个 onClick 方法“goToThirdActivity”,它启动 ThirdActivity

public void goToThirdActivity(View view){
        Intent i = new Intent(this , ThirdActivity.class);
        startActivity(i);
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

第三个活动:

在 ThirdActivity 中,我在两个不同的按钮上有两个 onClick 方法“backToFirstActivity”和“backToPreviousActivity”

在此处输入图片说明

在 ThirdActivity 上,当我单击“返回第一个活动”按钮时,我想返回到 FirstActivity。 …

android android-intent android-activity

5
推荐指数
1
解决办法
2437
查看次数

Splashscreen - 第一次使用共享首选项

你好我想在默认情况下显示另一个启动画面,如果应用程序第一次启动(安装后如右)

所以我写了这个.但是新的Activity没有启动它停留在Splash屏幕上.有人可以说它有什么不对吗?

import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.widget.TextView;

    public class splash extends Activity {
         private Thread splashTread;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.splash);

            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
            if(!prefs.getBoolean("firstTime", false)) {
                // run your one time code
                 Intent i = new Intent(splash.this, main.class);

                         startActivity(i);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putBoolean("firstTime", true);
                editor.commit();


             // thread for displaying the SplashScreen
             splashTread = new Thread() {
                 @Override
                 public void run() {
                     try …
Run Code Online (Sandbox Code Playgroud)

android splash-screen

2
推荐指数
1
解决办法
5766
查看次数

FLAG_ACTIVITY_CLEAR_TOP无法正常工作

我在清单中有4个活动A,B,C,D,E,每个活动都声明为android:launchMode="singleInstance",A parentActivity为B,而B为C的父活动。

现在用户像这样导航到E:A> B> C> D>E。我在E中有一个带有以下onClickListener的按钮

    Intent intent = new Intent(E.this, C.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent);
Run Code Online (Sandbox Code Playgroud)

我需要的?(也根据文档,如果我理解正确,应该会发生这种情况)

  • 活动D和E应该从堆栈中清除
  • 应恢复活动C的意图(由于设置了singleInstance,因此不会重新创建它)

    我想要这个堆栈:C | B | 一种

发生了什么?

  • 继续接受活动的活动C
  • 活动D和E 不会从堆栈中清除。我可以一次又一次单击“后退”按钮以查看E,D,B,A。

    我得到这个堆栈:C | E | D | B | 一种

PS:我的问题与非常相似,但是那里给出的答案不适合这个问题。我在其他地方找到的一些答案:

  1. 我不能使用NEW_TASK标志,因为我需要保持堆栈中的A,B处于活动状态。
  2. 我不能在D上使用startActivityForResult()然后再完成()这实际上是一个hack,因为我在E中还有其他决定性因素,例如根据用户输入将意图传递给其他活动。
  3. 我无法在向E传递意图时完成(D)活动D,而在击中C时却完成E(事件E),这实际上可以解决问题。但是,如果在E上按了back,我希望它返回D,而不是C。
  4. 当我startactivity(intent)在设置标志后立即尝试对E进行finish()时,它只是完成E,而不完成D。

android android-intent android-activity

2
推荐指数
1
解决办法
1410
查看次数