【问题标题】:Return intent not working [duplicate]返回意图不起作用[重复]
【发布时间】:2016-04-07 05:47:52
【问题描述】:

大家好,我不是一个非常高级的程序员,所以我对遇到的这个奇怪的问题摸不着头脑。试图让Activity A 调用Activity B 以便它可以将一些数据添加到SQL Database 并退出回到Activity A。问题是 Activity B 上的 Button 返回到 Activity A 已损坏,甚至不会输出任何 Android 监视器日志。

活动 A 调用 B 使用:

private void btnFunc (){
    Button btnAddSubject = (Button) findViewById(R.id.btn_new_subject);
    btnAddSubject.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent myIntent = new Intent(v.getContext(), AddSubject.class);
            startActivityForResult(myIntent,1);
        }
    });

}

这就是 Activity B 的 return Function 看起来是在 onCreate 函数中调用的:

public void Continue(){
    //SQL Instances
    subject = new SQLSubject(this);
    mContinue.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isInserted = subject.insertData(add_subject.getText().toString(),
                            add_subject_group.getText().toString(),
                            add_teacher.getText().toString());
                    if (isInserted == true) {
                        Toast.makeText(AddSubject.this, "Saved", Toast.LENGTH_LONG).show();
                        returnIntent = new Intent(v.getContext(), MainActivity.class);
                        setResult(1);
                        startActivity(returnIntent);
                    }else {
                        Toast.makeText(AddSubject.this, "Error saving data", Toast.LENGTH_LONG).show();
                        returnIntent = new Intent(v.getContext(), MainActivity.class);
                        setResult(0);
                        startActivity(returnIntent);

                    }
                }
            }
    );
}

onCreate 还包括:

finishActivity(1);

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    您没有返回 Intent,您正在重新启动其他活动(并且对 returnIntent 不执行任何操作)。

    您应该在结果中设置意图并完成当前活动。

    例如

    setResult(1, returnIntent);
    finish();
    

    然后onActivityResult 的代码将在具有startActivityForResult 的活动中被调用。

    【讨论】:

      【解决方案2】:

      代替

      setResult(1);setResult(0);

      称之为:

      setResult(Activity.RESULT_OK,returnIntent); //instead of setResult(1);
      

      setResult(Activity.RESULT_CANCELED, returnIntent); //instead of setResult(0);
      

      【讨论】:

      • 这只是一个常数,正确的检查是否在onActivityResult中并不重要
      • 如果真的是这样,那么this solution怎么会有1000多票。
      • 因为解释清楚了? if(resultCode == Activity.RESULT_OK) 可以很容易地成为 if(resultCode == 0)只是一个常数,这是一个建议,而不是解决方案
      猜你喜欢
      • 2015-09-24
      • 2014-12-25
      • 2018-05-07
      • 2012-05-18
      • 1970-01-01
      • 2017-08-03
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多