如何直接从链接子的子活动中将数据传递给MainActivity

时间:2017-02-11 03:05:57

标签: java android android-intent

MainActivity包含按钮。   点击按钮将转到活动2。   活动2具有提交到第3活动的按钮。   第3个活动已完成按钮,应该将我带到MainActivity并显示从2和3获取的数据。活动3不应该回到活动2。

我的方法: -

从Mainactivity盯着Activity2

def tags(request, slug):
    context = {}
    tags = Tags().tag_filer_sites(slug.replace('-', ' '))

    context['slug'] = slug
    context['full_name'] = Tag.objects.filter(slug=slug)
    context['tags'] = tags['sites']

    return render(request, 'mainapp/all_tags.html', context)

从活动2开始,我再次启动Activity3并传递数据

 Intent activity2Intent= new Intent(MainActivity.this, activity2.class);
 startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST);

在活动3中,我使用从活动到相关数据的值,然后提交完成,将所有这些数据包发送到MainActivity。

`Intent Activity3Intent = new Intent(this, Activity3.class);
Activity3.putExtra("Position", mPosition);
Activity3.putExtra("CName", mCName);
Activity3Intent .setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(Activity3Intent);`

主要活动有onActivityResult方法来检查数据,但它永远不会被提取。

有人可以建议我如何将数据发送回MainActivity.navigateUpTo将我带到MainActivity,但数据永远不会传递。

提前致谢。 任何帮助表示赞赏

4 个答案:

答案 0 :(得分:0)

修改

尝试 创建和扩展基类android.app.Application类并在其中定义全局变量,然后您可以在应用程序上下文中获取或设置值。

public class Globalvar extends Application {

    private String mSName;

    public String getSmSName() {
        return mSName;
    }

    public void setmSName(String mSName) {
        this.mSName = mSName;
    }
}

在你的Android清单中,你必须声明实现android.app.Application

的类
<application 
  android:name=".Globalvar" 
  android:icon="@drawable/icon" 
  android:label="@string/app_name">

然后获取或设置

// set
((MyApplication) this.getApplication()).setmSName("foo");

// get
String s = ((MyApplication) this.getApplication()).getmSName();

上一个答案

MainActivity中,在onCreate()方法中,您必须检索Bundle(包含调用活动发送的所有数据)

    Bundle bundle = getIntent().getExtras();
    String sname = bundle.getString("SName");
    String cname = bundle.getString("CNme");

答案 1 :(得分:0)

您的onActivityResult永远不会从第3个活动中调用,因为您正在使用Intent activity2Intent= new Intent(MainActivity.this, activity2.class); startActivity(activity2Intent); 启动第2个活动,并且您正试图绕过第2个活动。

请尝试以下代码来解决问题。

<强> MainActivity.java

Intent Activity3Intent = new Intent(this, Activity3.class);
Activity3.putExtra("Position", mPosition);
Activity3.putExtra("CName", mCName);
Activity3Intent .setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(Activity3Intent);

<强> activity2.java

Intent goMainActivity =    new Intent(this,MainActivity.class);
goMainActivity .putExtra("callingFrom", activity3);
goMainActivity .putExtra("SName", mSName);
goMainActivity .putExtra("CNme", mCName);
startActivity(goMainActivity);
ActivityCompat.finishAffinity(this);

这是您的主要任务

<强> activity3.java

MainActivity

现在您只需要检查onCreate()的{​​{1}}

String callingFrom = bundle.getString("callingFrom");
if(callingFrom.equalsIgnoreCase("activity3"))
{
    // now get your othere parameters and do your work with them.
}

答案 2 :(得分:0)

有多种方法可以实现这个目标

在Manifest文件中使用活动android:launchMode="",您可以按意图获取数据不要使用startActivityForResult这只会在从一个活动反向按下时运行

两次使用SharedPreferences保存每个活动

三个结合android:launchModeSharedPreferences而不使用意图数据

答案 3 :(得分:0)

尝试此解决方案。

<强> MainActivity.java

$(this).val('') with document.getElementById('silo').value('');
打开Activity3完成Activity2并使用“startActivityForResult”启动Activity3时

activity2.java

Intent activity2Intent= new Intent(MainActivity.this, activity2.class);
startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST);

activity3.java 返回结果,此结果将转到MainActivity的OnActivityResult(),不要启动新的MainActivity。

Intent Activity3Intent = new Intent(this, Activity3.class);
Activity3.putExtra("Position", mPosition);
Activity3.putExtra("CName", mCName);
startActivityForResult(activity2Intent, INTENT_COUNTRY_REQUEST);
finish();

现在,您将在Intent resultIntent = new Intent(); resultIntent.putExtra("SName", mSName); resultIntent.putExtra("CNme", mCName); setResult(RESULT_OK, resultIntent); finish(); 的{​​{1}}

中获取数据
MainActivity