如何在不启动Activity的情况下将值传递给另一个选项卡

时间:2012-04-03 10:57:26

标签: android android-activity tabs

我有2个标签--Tab1和Tab2,Tab1Activity和Tab2Activity 我想将值从Tab1Actvity传递给Tab2Activity但不想启动Tab2Activity。 当我尝试下面的代码时,它给出空值:

在Tab1Activity中

getParent().getIntent().putExtra("key", "value");

在Tab2Activity中

String valueString=getParent().getIntent().getStringExtra("key");
System.out.println("Testing.....: "+valueString);

3 个答案:

答案 0 :(得分:5)

我真的不鼓励你通过扩展Application类来使用全局变量。如果您的应用程序转到后台(例如,通过电话),Android系统可能会决定终止您的应用程序。当呼叫结束时,您的应用程序和活动堆栈将被恢复,但您的活动状态将会丢失。

我建议你使用广播将数据发送到另一个活动。

在你的Tab1Activity中:

Intent dataIntent = new Intent();
dataIntent.setAction("com.your.app.DATA_BROADCAST");
dataIntent.putExtra("tag", "your data");
sendBroadcast(dataIntent);

Tab2Activity:

BroadcastReceiver receiver = new BroadcastReceiver() {    
  @Override
  public void onReceive(Context context, Intent intent) {    
    String yourData = intent.getStringExtra("tag");
  }
};

IntentFilter filter = new IntentFilter();
filter.addAction("com.your.app.DATA_BROADCAST");
registerReceiver(receiver, filter);

答案 1 :(得分:1)

您肯定想重新考虑使用“活动”作为标签的内容。更标准的方法是使用一个Activity,它使用Tabs仅在选择特定选项卡时显示部分布局。

Android文档有一个很好的工作示例,请查看Hello, TabWidget

替代

如果由于某种原因您确实需要使用“活动”,则可以在它们之间传递信息,方法是在您使用的Intent中为extras包添加值以打开每个Activity,或者扩展Application类。 / p>

通过扩展Application类(并将其作为Singleton实现),您将获得一个在任何应用程序组件存在时都存在的对象,从而提供在应用程序组件之间存储和传输复杂对象数据的集中位置。

答案 2 :(得分:1)

您还可以使用静态类或SharedPreferences在选项卡之间进行数据传输。 正确的方法是将静态字段设置为创建选项卡的活动

public class greformanews extends TabActivity {

       public static String JorgesysTitle;
...
...
...

所以在标签1中定义的活动中

@Override
 protected void onPause() { 
    greformanews.JorgesysTitle = "JORGESYS =)";
 super.onPause();
}

在标签2中定义的活动

//get  value defined in Activity 1 !:)
String Title =  greformanews.JorgesysTitle