Android:对主活动使用后退按钮会导致错误强制关闭

如何解决Android:对主活动使用后退按钮会导致错误强制关闭

| 我有一个mainActivity是Customer.java,具有5个差异的listview。活动。当我点击它们时,我能够打开所有5个活动,但是当我按下后退按钮(设备后退按钮)返回到mainAcitivity时,会给我一个错误,您将在代码下方看到debug / logcat。我在主屏幕下有2个示例活动(注销和时钟输入)。 奖励:我想拥有的另一件事是,当单击“ clockinActivity”按钮时,我希望它将当前时间和日期发送到网络服务器(我的项目中已经有customhttp类)并自动返回到主屏幕。 我已经读过 http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html 而且这似乎不起作用
@Override
public boolean onKeyDown(int keyCode,KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
       //do smth
    }
    return super.onKeyDown(keyCode,event);
}
客户.java
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class Customer extends ListActivity
{
    TextView selection;
    CustomerListItem[] items = { 
            new CustomerListItem(\"Start Trip\",StartTripActivity.class),new CustomerListItem(\"Clock in\",ClockinActivity.class),new CustomerListItem(\"Customer Svc\",CustomerSvcActivity.class),new CustomerListItem(\"Independent Inspection\",InspectionActivity.class),new CustomerListItem(\"Pick Up\",PickUpActivity.class),new CustomerListItem(\"Log Out\",LogoutActivity.class)};
    private TextView resultsTxt;

    @Override
    public void onCreate(Bundle icicle)
    {
        super.onCreate(icicle);
        setContentView(R.layout.main);
        setListAdapter(new ArrayAdapter<CustomerListItem>(
                this,android.R.layout.simple_list_item_1,items));
        selection = (TextView) findViewById(R.id.selection);
    }

    @Override
    protected void onListItemClick(ListView l,View v,int position,long id)
    {
        super.onListItemClick(l,v,position,id);
        final Intent intent = new Intent(this,items[position].getActivity());
        startActivityForResult(intent,position);
    }

    @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent intent)
    {
        super.onActivityResult(requestCode,resultCode,intent);
        if (resultCode == RESULT_OK)
        {
            // Perform different actions based on from which activity is
            // the application returning:
            switch (requestCode)
            {
                case 0:
                    // TODO: handle the return of the StartTripActivity
                    break;
                case 1:
                    // TODO: handle the return of the ClockinActivity
                    break;
                case 2:
                    // TODO: handle the return of the CustomerSvcActivity
                case 3:
                    // TODO: handle the return of the InspectionActivity
                    break;
                case 4:
                    // TODO: handle the return of the PickUpActivity
                    break;
                case 5:
                    // TODO: handle the return of the LogoutActivity
                    break;
                default:
                    break;
            }
        }
        else if (resultCode == RESULT_CANCELED)
        {
            resultsTxt.setText(\"Canceled\");
        }
    }
}
ClockinActivity.java
import java.util.Date;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;



public class ClockinActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.clockin);
        Thread myThread = null;



        Runnable runnable = new CountDownRunner();
       myThread= new Thread(runnable);   
        myThread.start();

   }

   public void doWork() {

   runOnUiThread(new Runnable() {
       public void run() {
           try{
       TextView txtCurrentTime= (TextView)findViewById(R.id.lbltime);
                   Date dt = new Date();
                   int hours = dt.getHours();
                   int minutes = dt.getMinutes();
                   int seconds = dt.getSeconds();
                   String curTime = hours + \":\"+ minutes + \":\"+ seconds;
                   txtCurrentTime.setText(curTime);
       }catch (Exception e) {

       }
       }
   });

   }

   class CountDownRunner implements Runnable{
       // @Override
       public void run() {
               while(!Thread.currentThread().isInterrupted()){
                   try {
                   doWork();
                       Thread.sleep(1000);
                   } catch (InterruptedException e) {
                           Thread.currentThread().interrupt();
                   }catch(Exception e){
                   }
               }



Button btn = (Button) findViewById(R.id.btn_OK);

//---event handler for the OK button---
btn.setOnClickListener(new View.OnClickListener() 
{
    public void onClick(View view) {
        Intent data = new Intent();

        //---get the EditText view--- 
//        EditText txt_username = 
//            (EditText) findViewById(R.id.txt_username);

        //---set the data to pass back---
       // data.setData(Uri.parse(
           // txt_username.getText().toString()));                           
        setResult(RESULT_OK,data);

        //---closes the activity---
        finish(); 
    }
});  
}
}
}
注销.java
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;



public class LogoutActivity extends Activity {
    private Button btnLogout;
    private Button btnCancel;
    private TextView lblResult;
    private EditText code;
    @Override
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.logout);

        code = (EditText)findViewById(R.id.codeout);
        btnLogout = (Button) findViewById(R.id.submit);
        btnCancel = (Button) findViewById(R.id.cancel);
        lblResult = (TextView)findViewById(R.id.result);

        btnLogout.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                String logout = code.getText().toString();

                if (logout.equals(\"99999\")){
                    lblResult.setText(\"Logout successful\");

                    Intent i = new Intent(getApplicationContext(),Login.class);
                    startActivity(i);
                } else {
                    lblResult.setText(\"Logout failed\");

                }
            }
        });

         btnCancel.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent i = new Intent(getApplicationContext(),Customer.class);
                startActivity(i);

            }

    });


}}
LogCat 05-19 21:52:51.586:WARN / ActivityManager(58):启动超时已到期,放弃唤醒锁定! 05-19 21:52:51.586:WARN / ActivityManager(58):HistoryRecord {45108f08 com.merrill / .Customer}的活动空闲超时 05-19 21:52:56.799:WARN / ActivityManager(58):HistoryRecord {4510cf30 com.merrill / .Clockin}的活动销毁超时 除错 ActivityThread.deliverResults(ActivityThread $ ActivityRecord,List)行:3515 ActivityThread.handleSendResult(ActivityThread $ ResultData)行:3557 ActivityThread.access $ 2800(ActivityThread,ActivityThread $ ResultData)行:125 ActivityThread $ ResultData(ActivityThread $ H).handleMessage(Message)行:2063 ActivityThread $ H(Handler).dispatchMessage(Message)行:99 Looper.loop()行:123 ActivityThread.main(String [])行:4627 Method.invokeNative(Object,Object [],Class,Class [],Class,int,boolean)行:不可用[本机方法] Method.invoke(Object,Object ...)第521行 ZygoteInit $ MethodAndArgsCaller.run()行:868 ZygoteInit.main(String [])行:626 NativeStart.main(String [])行:不可用[本机方法]     

解决方法

我通过使用下面的代码找到了答案。我不得不将代码放置在onCreate之前,将我一直在将代码放置在onCreate之后的错误。除非其他人有更好的建议,否则这似乎对我有用。即使这两个代码都起作用,我还是喜欢第一个代码,因为它会杀死当前活动'finish()\'并返回到上一个屏幕,而第二个代码它将启动该活动并将两个活动都保留在堆栈中。
@Override
    public boolean onKeyDown(int keyCode,KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            Pop(\"Back Button\");
            Intent intent = new Intent();
            setResult(RESULT_OK,intent);
            finish();
            return true;
        }
        return super.onKeyDown(keyCode,event);
    }
要么
@Override  
    public boolean onKeyDown(int keyCode,KeyEvent event)  
    {  
        //replaces the default \'Back\' button action  
        if(keyCode==KeyEvent.KEYCODE_BACK)  
        {  
            //do whatever you want the \'Back\' button to do  
            //as an example the \'Back\' button is set to start a new Activity named \'NewActivity\'  
            this.startActivity(new Intent(thisActivity.this,nextActivity.class));  
        }  
        return true;  
    }  
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-