我有三个活动,我们称之为一,二,三.从活动ONE开始,按钮按下开始活动TWO.从活动TWO开始,按钮开始活动三.
很简单.
现在,活动THREE需要从应用程序访问一些数据(可能存在也可能不存在).在THREE的onResume()方法中,检查数据,如果不存在则活动结束,如下所示:
@Override
protected void onResume() {
super.onResume();
/* ... get data from app ... */
if (data == null) {
Toast.makeText(this, "Data not found", Toast.LENGTH_SHORT).show();
finish();
return;
}
/* ... other logic ... */
}
Run Code Online (Sandbox Code Playgroud)
当data == null三,完成,摧毁并返回到TWO.一切都很好.现在在TWO中,按后退按钮调用finish()TWO,但TWO从不调用onDestroy().用户返回到ONE就好了,但是任何后续返回TWO的意图都不起作用并且不会抛出任何错误.TWO处于完成(并暂停)的状态,但从未被破坏,因此无法恢复.
那么,为什么在这种情况下三重要?如果我删除finish()上面代码块中的调用,并依赖于"自然"完成三个(通过使用后退按钮),当用户返回到ONE时,TWO已被正确销毁.
好吧,这里真的让人感到困惑......
保持finish()呼叫到位,我可以通过直接从ONE启动THREE来缓解挂断,然后"自然地"完成它(后退按钮).在THREE被销毁(第二次)之后,TWO按预期打开.
我读过的一切都已经说我应该是确定通话finish()中onResume()的一项活动.但在这种情况下,它会使某些状态处于不良状态,并阻止我破坏呼叫活动.
想法?还是我把你的大脑翻了个遍?
编辑:
进一步的探索发现了这颗宝石......
finish()使用postDelay()大约500毫米的处理程序在THREE 周围调用将允许TWO按预期关闭.像这样:
@Override
protected void onResume() {
super.onResume();
/* ... get data from app …Run Code Online (Sandbox Code Playgroud) 此对话框询问您是否要安装其他应用程序...所以当onclicked没有按钮时,它必须返回到上一个屏幕
downloadDialog.setNegativeButton(stringButtonNo,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialogInterface, int i) {
finish();
}
});
Run Code Online (Sandbox Code Playgroud)
这给出了错误:
对于类型new DialogInterface.OnClickListener(){},未定义方法finish()
我怎么能实现我想要的???
package com.Android.barcode;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.TextView;
public class BarcodeActivity extends Activity {
public static String upc;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IntentIntegrator.initiateScan(this);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case IntentIntegrator.REQUEST_CODE: {
if (resultCode != RESULT_CANCELED) {
IntentResult scanResult = …Run Code Online (Sandbox Code Playgroud) 当我使用这种方法时,我会回到登录页面,但我仍然可以点击返回按钮,它会将我返回到上一个活动.为什么不关闭其他活动?
public void restartApplication() {
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
Run Code Online (Sandbox Code Playgroud)
有没有办法完成除登录活动之外的所有活动?或重新启动整个应用程序?
我经常看到以类结尾的类的例子finish(),但绝对不是总是如此.我的问题是你什么时候结束课程finish()?它究竟做了什么,用后退按钮结束一个类并用它结束它有finish()什么区别?
提前致谢!
我是一个初学者 android 程序员,我似乎有一个问题:我打开新活动,用
Intent newGameIntent = new Intent(actionName);
startActivity(newGameIntent);
Run Code Online (Sandbox Code Playgroud)
一切正常,活动打开。但是当我调用 finish() 时,它不会进入 previus 活动,它只是关闭应用程序(没有错误或其他日志消息)
有谁知道为什么会这样?谢谢你的时间!
根据要求,这里有更多代码(我可能完全搞砸的东西):第一个活动:
@Override
protected void onStop() {
super.onStop();
SplashScreen.sounds.releasSounds();
finish();
}
@Override
protected void onPause() {
super.onPause();
pauseActivity();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
gameLoop.resumeThread();
SplashScreen.sounds.resumeSounds();
}
private void pauseActivity() {
gameLoop.pauseThread();
SplashScreen.sounds.pauseBck();
}
Run Code Online (Sandbox Code Playgroud)
和调用秒活动的第一个活动
Intent newGameIntent = new Intent("com.YuvalApps.menus.NEWGAMEMENU");
startActivity(newGameIntent);
Run Code Online (Sandbox Code Playgroud)
和秒活动
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
finish();
}
Run Code Online (Sandbox Code Playgroud) 我正在开发一个有两个活动的应用程序,Main和Info.应用程序以MainActivity启动,当您单击按钮时,InfoActivity从右侧滑入.当您单击另一个按钮时,InfoActivity将再次向右滑动并返回Main.
这就是我在MainActivity中实现动画和按钮单击的方法:
buttonInfo.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent i = new Intent(getApplicationContext(), Info.class);
Bundle mAnimate =
ActivityOptions.makeCustomAnimation(getApplicationContext(),
R.anim.ani1,R.anim.ani2).toBundle();
startActivity(i,mAnimate);
}
});
Run Code Online (Sandbox Code Playgroud)
我在InfoActivity中做了类似的工作,效果很好.但是,我想要并且需要使用intent调用finish()而不是startActivity,因为我在MainActivity中有一个服务器连接,当我调用startActivity时它会断开连接.
任何想法如何将这样的动画应用于finish()方法或其他建议?
在我的应用程序中,我有一个导航抽屉,我的应用程序的工作方式是只有一个活动,如果您从导航抽屉中选择一些东西,它会启动/替换当前片段.我怎样才能这样做,以便当从导航抽屉中选择某些内容并且新片段开始时,旧片段结束
我不能
@Override
public void onPause() {
// TODO Auto-generated method stub
super.onPause();
getActivity().finish();
}
Run Code Online (Sandbox Code Playgroud)
因为只有一项活动会杀死应用程序.
我如何杀死片段?
编辑:我的片段交易
Home HomeFragment = new Home();
transaction.replace(R.id.llhome, HomeFragment);
transaction.addToBackStack(null);
transaction.commit();
mDrawerList.setItemChecked(position, true);
mDrawerLayout.closeDrawer(mDrawerList);
Run Code Online (Sandbox Code Playgroud)
谢谢
在我的活动'A'中,我正在使用计时器和媒体播放器来播放音频.我的应用程序正在设置活动说活动'B',用于选择音频播放模式.我正在使用 startActivityForResult()并从活动B发送resultCode.问题是活动B花费了太多时间来完成.因为B中的音频在B完成之前开始.怎么处理这个?
我的活动B callig代码是:
Intent intent = new Intent(context, Setting.class);
startActivityForResult(intent, Cover.SETTING_REQ);
Run Code Online (Sandbox Code Playgroud)
我的活动B有以下代码:
public class Setting extends Activity {
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.settings);
context = this;
final RelativeLayout layout = (RelativeLayout) findViewById(R.id.setting_layout);
Display display = getWindowManager().getDefaultDisplay();
final int width = display.getWidth();
final int height = display.getHeight();
int[] modes = { R.drawable.settingspageiphone, R.drawable.readtome,
R.drawable.readwithpause, R.drawable.icanreadit };
Bitmap bm = BitmapLib.prepairBitmap(context, modes[Read.mode], width,
height);
layout.setBackgroundDrawable(new BitmapDrawable(bm));
layout.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent …Run Code Online (Sandbox Code Playgroud) 我将结果称为活动:
private static final int CODE_LOGIN = 0;
private static final int CODE_DETAILS = 1;
private void callDetailsActivity() {
Intent switchToDetailsActivity = new Intent(getApplicationContext(), Details.class);
switchToDetailsActivity.putExtra(TAG_ID, details.get(TAG_ID));
startActivityForResult(switchToDetailsActivity, CODE_DETAILS);
}
Run Code Online (Sandbox Code Playgroud)
现在在我的Details.class中,我打电话回到上一个活动:
@Override
public void onBackPressed() {
setResult(RESULT_OK);
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
然后是我的 onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
if (requestCode == CODE_LOGIN) {
// This is for my other Activity, where the "return" works
}
}
updateOffers(); …Run Code Online (Sandbox Code Playgroud) 我有一个关于android studio中活动的finish()方法的问题:
我有这个简单的代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
在我的activity_main中,我只需要一个按钮.当我点击按钮时,活动结束,然后我回到设备的主屏幕......但是,当我点击设备的菜单按钮(显示所有应用程序在后台运行)时,我仍然看到我的活动......我不想要那个.我该如何解决?