Sha*_*hah 72 android activity-finish
我有一个Android应用程序.我正在制作带有进度条的加载屏幕.
我在onCreate方法中输入了一个延迟.当计时器结束时,我想完成当前活动并开始一个新活动.
它只是在调用finish()方法时给我一个例外.
public class LoadingScreen extends Activity{
private LoadingScreen loadingScreen;
Intent i = new Intent(this, HomeScreen.class);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.loading);
CountDownTimer timer = new CountDownTimer(10000, 1000) //10 second Timer
{
public void onTick(long l)
{
}
@Override
public void onFinish()
{
loadingScreen.finishActivity(0);
startActivity(i);
};
}.start();
}
}
Run Code Online (Sandbox Code Playgroud)
如何在进度条完成后更改代码以使其结束?
Ale*_*lov 121
如果您正在进行加载屏幕,只需将参数设置为不将其保留在活动堆栈中.在manifest.xml中,您定义活动的位置:
<activity android:name=".LoadingScreen" android:noHistory="true" ... />
Run Code Online (Sandbox Code Playgroud)
在你的代码中,不再需要调用.finish().做startActivity(i);
也无需在单独的字段中保留当前活动的实例.您可以随时访问它LoadingScreen.this.doSomething()而不是private LoadingScreen loadingScreen;
Sri*_*ram 46
我尝试使用这个例子,但它失败了.每次我用来在处理程序中调用finish()/ finishactivity()时,我都会遇到这种威胁java.lang.IllegalAccess Exception.我不确定这对提出这个问题的人有什么用处.
相反,我发现的解决方案是在您的活动中创建一个方法,例如
void kill_activity()
{
finish();
}
Run Code Online (Sandbox Code Playgroud)
从处理程序的run方法内部调用此方法.这对我来说就像一个魅力.希望这有助于任何人在努力解决"如何从不同的线程关闭活动?".
Ted*_*opp 12
您需要finish()从UI线程调用,而不是后台线程.这样做的方法是声明一个Handler并要求Handler在UI线程上运行Runnable.例如:
public class LoadingScreen extends Activity{
private LoadingScreen loadingScreen;
Intent i = new Intent(this, HomeScreen.class);
Handler handler;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
handler = new Handler();
setContentView(R.layout.loading);
CountDownTimer timer = new CountDownTimer(10000, 1000) //10seceonds Timer
{
@Override
public void onTick(long l)
{
}
@Override
public void onFinish()
{
handler.post(new Runnable() {
public void run() {
loadingScreen.finishActivity(0);
startActivity(i);
}
});
};
}.start();
}
}
Run Code Online (Sandbox Code Playgroud)
只需调用finish()方法:
context.finish();
Run Code Online (Sandbox Code Playgroud)
如果要启动新活动并完成当前活动,可以执行以下操作:
API 11或更高版本
Intent intent = new Intent(OldActivity.this, NewActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
API 10或更低
Intent intent = new Intent(OldActivity.this, NewActivity.class);
intent.setFlags(IntentCompat.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
我希望这可以帮助某人=)
我正在做的是开始一个新的活动,然后关闭当前的活动。所以,记住这个简单的规则:
finish()
startActivity<...>()
Run Code Online (Sandbox Code Playgroud)
并不是
startActivity<...>()
finish()
Run Code Online (Sandbox Code Playgroud)