【问题标题】:passing data when returning to main activity(Intent) what I've done wrong?返回主要活动(意图)时传递数据我做错了什么?
【发布时间】:2013-12-23 14:03:04
【问题描述】:

我是安卓新手。这可能是最简单的问题!但我无法弄清楚这里出了什么问题,

我试图创建一个通过意图传递值的基本示例。因此,当我关闭第二个活动时,我需要将数据传递给主活动,这是代码

IntentTest1(MainActivity)

public void onClick(View arg0) {
            // TODO Auto-generated method stub
MyClass.myToast("Clicked",getApplicationContext());
Intent myIntent = newIntent(getApplicationContext(),SecondPage.class);
startActivityForResult(myIntent,0); 
        }
    });
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    if(requestCode == 0 && resultCode == RESULT_OK)
        if(data.hasExtra("title"))
        {
    MyClass.myToast(""+resultCode+""+requestCode, getApplicationContext());
    String str = data.getExtras().getString("title").toString();
    titleText.setText(str); 
        }
    super.onActivityResult(requestCode, resultCode, data);
}

第二页

public void finish()
{

Intent returnIntent = new Intent(getApplicationContext(),Intenttest1.class);
returnIntent.putExtra("Welcome Back!!","title");
setResult(RESULT_OK, returnIntent);
    //      below was for tosting and it works!!
MyClass.myToast("finally",getApplicationContext());
super.finish();
}

我认为接收意图有一些错误,我无法弄清楚。 需要答案和建议 提前致谢

【问题讨论】:

    标签: android android-intent


    【解决方案1】:

    第一个问题是当您创建 Intent 以发送回第一个 Activity 时。由于您使用的是startActivityForResult(),因此您想使用一个空的构造函数。所以改变

    Intent returnIntent = new Intent(getApplicationContext(),Intenttest1.class);
    

    Intent returnIntent = new Intent();
    

    第二个问题是你的key/value 对倒在你的Extras 中。 key,这就是您使用getStringExtra() 等寻找的东西......应该是这对中的第一个。所以这个

    returnIntent.putExtra("Welcome Back!!","title");
    

    应该是

    returnIntent.putExtra("title", "Welcome Back!!");
    

    题外话

    我会考虑使用相关名称作为您的params。例如,我会将您的onClick()

    public void onClick(View arg0)
    

    public void onClick(View view)  
    

    viewv 或类似的东西更有意义,因为参数实际上是一个视图,它会更具可读性

    我还建议将Activity Context 用于您的Intent,您可以从传递给onClick() 的参数(View)中获得。所以改成

    public void onClick(View v) 
    {
         MyClass.myToast("Clicked",getApplicationContext());
         Intent myIntent = newIntent(v.getContext(),SecondPage.class);
         startActivityForResult(myIntent,0); 
    

    【讨论】:

    • 不客气!并回答有关Context 以及在哪里使用thissee this very good answer 的其他答案的问题
    • 如果您在listener 中使用this,例如onClick(),通常会出错,因为它将引用内部类而不是Activity
    • 一个小疑问是为什么我们用 startActivityForResult 传递 0?我没有在示例代码的其他任何地方使用该值。
    • 查看文档,但它会以RequestCode 的形式传回onActivityForResult()。如果您在同一个 Activity 中有多个 startActivityForResult()s,例如调用摄像头、挑选联系人等,您可以有不同的静态变量...
    • 知道了!!非常感谢!!:-)
    【解决方案2】:

    你必须使用

    if(data.hasExtra("Welcome Back!!"))
    

    而不是

    if(data.hasExtra("title")) 
    

    onActivityResultWelcome Back!! 是键,title 是您附加功能中该键的值。

    【讨论】:

    • 知道了,非常感谢,我在写代码的时候应该更加小心:)
    【解决方案3】:

    试试这个代码:

    Intent returnIntent = new Intent(getApplicationContext(),Intenttest1.class);
    returnIntent.putExtra("Key name here in ur case title","Value name");
    setResult(RESULT_OK, returnIntent);
    //      below was for tosting and it works!!
     MyClass.myToast("finally",getApplicationContext());
    super.finish();
    

    }

    【讨论】:

    • nope!!:( 它不起作用!!无论如何谢谢,现在我还有一个疑问?如果它会起作用?有什么区别?我可以在哪里使用“this”,在哪里可以使用't..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多