2011-12-07 77 views
0

好的,首先,我承担起我,因为我对Android开发相对较新。实现两个活动并在它们之间传递信息

所以这里是情况。我有一个记录数据的父(主)活动。可以说,为了简单起见,它包含一个编辑框。现在,子(sub)活动包含当前空白的单个文本视图。默认情况下,当应用程序启动时,主要活动已启动。现在,当用户在编辑框中输入他的名字并点击一个按钮时,我希望将该名称追加到第二个活动的文本视图中。然后,我可以切换到第二个活动并查看该更改。然后,我点击后退按钮并输入另一个名称。当我再次切换到第二个活动时,我必须看到这种变化,等等。显然,这个场景不仅包含编辑框和按钮,但我认为这个想法是一样的。

因此,在本质上是我想知道的是:

  1. 我怎么活动之间切换,保持在每个数据。我将不得不在运行时创建两个活动?
  2. 如何在这些活动之间传递数据?
  3. 当我第二次活动的焦点时按下后退按钮我如何停止完全关闭该活动?

感谢您的帮助!

+0

传递数据: http://stackoverflow.com/questions/2965109/passing-data-between-activities-in-android –

回答

0

您可以通过使用Intents来完成此操作。 这些基本上启动了其他活动,并且能够向他们添加额外的信息,这可以在其他活动中检索到额外的好处。

在您的主要活动,当您点击按钮,添加以下内容:

EditText edittext = (EditText) findViewById(R.id.editTextID); 
Intent startSub = new Intent(this, SubActivity.class); 
String input = edittext.getText().toString(); 
startSub.putExtra("name", input); 
startActivity(startSub); 

这将启动您的子活动。 现在,在子活动,你可以在你的onCreate检索这些值()方法,像这样:

Bundle extras = getIntent().getExtras(); 
    // make sure there is actually extra data 
    if (extras != null) { 
     String theName = extras.getString("name"); 
     TextView text = (TextView) findViewById(R.id.yourTextView); 
     text.setText(theName); 
    } 

当你回去,并重新进入一个新的名字Intent将再次产生,这意味着你的文本框会再次改变。

祝你好运!

+0

出众!现在有点棘手。让我们说,而不是setText我想使用append()。假设活动2实际上是某种类型的日志模块,因此在活动之间传递数据可能会变得相当臃肿。不对?如果是这样,那么我怎么能说,保存活动2的状态? – rameezk

+0

这可以通过使用'startActivityForResult'来完成。这会创建一个完成后发回数据的活动。您可以在主类中提取这些数据并保存,然后将其附加到前一个值。空字符串 - >用edittext数据填充 - >发送到活动2 - >发回完成 - >填充早期的字符串 - >追加新的数据 - >重复 至少这是我如何在我的想法,但我'当然你有不同的计划。关于如何使用这种方法来回发送数据的更多信息可以在这里找到:http://www.vogella.de/articles/AndroidIntent/article.html#explicitintents –

+0

嗯后,给你的问题一个快速的思考,我认为你可能实际上正在寻找这样的东西:http://stackoverflow.com/questions/151777/how-do-i-save-an-android-applications-state/ 这保存了应用程序的状态,你可以重用当活动重新开放时。如果您不想将数据始终发送回1,然后返回2,那么这可能是更好地保存第二类数据的方法。 –

0

你必须要这样做。您可以通过以下意向传递数据:

Intent intent = new Intent(this, ActivityB.class); 
intent.putExtra("name", nameText); 

另一种方法是使用可在您的整个应用程序中访问的sharedpreferences。

如果您希望后退按钮不关闭您的活动,您需要重写backButtonPressed方法并再次启动activityA(使用intent标志不会始终启动新实例)。

至于节约活动状态阅读:活动之间http://developer.android.com/guide/topics/fundamentals/activities.html#SavingActivityState