【问题标题】:how to Managing activites for result如何管理活动以获得结果
【发布时间】:2014-08-23 08:12:20
【问题描述】:

我只有 2 个活动。

我想从 activity1 转到 activity2 ,做一些工作,然后将结果从 activty2 返回到 activity1

这是我在 activity1 中的代码:

Button otherkey = (Button) findViewById(R.id.button2);
        otherkey.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent3 = new Intent(EncryptionActivity.this , FileExplore.class);
                startActivityForResult(intent3, 123);
                onActivityResult(123, Activity.RESULT_OK , intent3) ;//i think heres my problem.
            }});

在activity1类中我有这个方法:

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        System.out.println("req" + requestCode + "\nres code :"+resultCode);
        if (requestCode == 123) {
            if(resultCode == 0){
                String result=data.getStringExtra("mydata");
                System.out.println(result);
            }
            if (resultCode == RESULT_CANCELED) {
                //Write your code if there's no result
                System.out.println("ddd");
            }
        }
    }//onActivityResult

而activity2中的代码是:

                        activity2.this.finish();
                        Intent enca = new Intent();
                        enca.putExtra("mydata", "hello");
                        setResult(RESULT_OK,enca);

我该如何解决这个问题?

【问题讨论】:

  • 你不需要在你的activity1中调用onActivityResult,只需调用startActivityForResult
  • 不要调用onActivityResult,这是一个系统会调用的回调
  • 在 onClick 中删除你介意它会造成问题的行 ;) 然后它就可以工作了
  • 旁白:更常见的是使用Log,而不是System.out.println
  • 另外,我会在你的 sn-p 结束时调用finish,而不是之前

标签: android android-intent android-activity onactivityresult


【解决方案1】:

您无需调用onActivityResult 方法,只需调用override 即可。并在返回您的活动时自动调用。查看此link 了解更多信息

public class TestActtiviy extends Activity{

    Button width, height, calc;
    TextView area;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

     //your code
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        //your code here
         if (resultCode == 0) {}

    }

}

【讨论】:

  • 我删除了该行。现在当程序想要从activity2返回时,出现错误:java.lang.RuntimeException: Failure将结果ResultInfo{who=null, request=123, result=0, data=null}传递给activity
  • 使用if(resultCode == RESULT_OK){ 而不是if (requestCode == 123) {
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
  • 2020-03-30
相关资源
最近更新 更多