Java 通过活动传递和保存数据

Java 通过活动传递和保存数据,java,android,android-studio,android-activity,Java,Android,Android Studio,Android Activity,我有三项活动 设置活动[A]//在此处输入将在主活动中使用的数字 主活动[B]//其中使用设置活动输入的编号 暂停活动[C]//这是一个对话框,用于暂停主活动并提供重置选项 我的问题是,我找不到一种方法将该号码从a传递到B,并且当用户从C重置B时,该号码将被保存。我尝试了一些方法,但我无法使其工作。 我的代码: A: B: C: 感谢您的帮助在启动暂停活动C时,您可以使用startActivityForResult()。startActivityForResult()使您能够将数据发送到接收

我有三项活动

  • 设置活动[A]//在此处输入将在主活动中使用的数字
  • 主活动[B]//其中使用设置活动输入的编号
  • 暂停活动[C]//这是一个对话框,用于暂停主活动并提供重置选项
我的问题是,我找不到一种方法将该号码从a传递到B,并且当用户从C重置B时,该号码将被保存。我尝试了一些方法,但我无法使其工作。 我的代码:

A:

B:

C:


感谢您的帮助

在启动暂停活动C时,您可以使用startActivityForResult()。startActivityForResult()使您能够将数据发送到接收活动,在您的情况下,该活动是主活动C。请参阅

您还可以设置(数据)片段以交换数据吗

在其onCreate集合中 setRetainInstance(真)

为您的card2string添加一些setter/getter

在不同的活动中,通过以下方式获得一个实例:

例如在主要活动中

  public final static String DATAFRAG = "DATA";//public so you can use it from any Activity
在例如onCreate或您需要数据的位置:

 FragmentManager fm = getFragmentManager();
    dataFrag = (DataFragment) fm.findFragmentByTag(MainActivity.DATAFRAG);
    if (dataFrag == null)
    {
        dataFrag = new DataFragment();
        dataFrag.setCard2String("something");
        fm.beginTransaction().add(dataFrag, MainActivity.DATAFRAG).commit();
    }
确保在数据片段中重写

    @Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
}
在onCreate中,使用捆绑包来保存和恢复数据,以防片段被销毁

HTH

修复了它。新代码:

A:

B:

C:


可能重复的可能重复的可能重复的你能举个例子吗plz你能更具体一点吗plz原因当你说“创建id”时无法理解你的意思是什么活动setRetainInstance阻止收集片段,因此它需要在片段的OnCreate中,并获取对datafragment的引用,好的,在参与交换的每个活动中,您都需要打电话给Fragmentmanager以获取它。。。最好的IMHO是将该调用放在onCreate中,但您也可以将其放在您真正需要的地方,啊,是的,如果您想传播回数据更改的事件,您还需要一个侦听器接口,在DataFragment中,列出要通知的侦听器,注意在这种情况下您是在哪个线程中
  public final static String DATAFRAG = "DATA";//public so you can use it from any Activity
 FragmentManager fm = getFragmentManager();
    dataFrag = (DataFragment) fm.findFragmentByTag(MainActivity.DATAFRAG);
    if (dataFrag == null)
    {
        dataFrag = new DataFragment();
        dataFrag.setCard2String("something");
        fm.beginTransaction().add(dataFrag, MainActivity.DATAFRAG).commit();
    }
    @Override
public void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);
}
 Intent timerdintent = new Intent(timer_settings.this, timer_2.class);
 Bundle timer2extras = new Bundle();
 timer2extras.putString("timer2string", String.valueOf(npsum));
 timerdintent.putExtras(timer2extras);
 startActivity(timerdintent);
SharedPreferences pref = getApplicationContext().getSharedPreferences("timer2stringpref", MODE_PRIVATE);
    Bundle timer2extras = getIntent().getExtras();
    if (timer2extras != null) {
        String timer2string = timer2extras.getString("timer2string");
        starttimer = Integer.parseInt(timer2string);
        SharedPreferences.Editor editor = pref.edit();
        editor.putInt("value", starttimer);
        editor.apply();

    } else {
        int starttimerx = pref.getInt("value", 0);
        starttimer = starttimerx;
    }
Intent resetintent = new Intent(timer_2_pause.this, timer_2.class);
startActivity(resetintent);