Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在不启动活动的情况下将值传递给另一个选项卡?_Android_Android Activity_Tabs - Fatal编程技术网

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

Android 如何在不启动活动的情况下将值传递给另一个选项卡?,android,android-activity,tabs,Android,Android Activity,Tabs,我有两个选项卡-Tab1和Tab2,Tab1活动和Tab2活动。 我想将值从Tab1Activity传递到Tab2Activity,但不想启动Tab2Activity。 当我尝试下面的代码时,它给出空值: 在tab1活动中 getParent().getIntent().putExtra("key", "value"); String valueString=getParent().getIntent().getStringExtra("key"); System.out.println("T

我有两个选项卡-Tab1和Tab2,Tab1活动和Tab2活动。
我想将值从Tab1Activity传递到Tab2Activity,但不想启动Tab2Activity。 当我尝试下面的代码时,它给出空值:

在tab1活动中

getParent().getIntent().putExtra("key", "value");
String valueString=getParent().getIntent().getStringExtra("key");
System.out.println("Testing.....: "+valueString);
在tab2活动中

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

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

Android文档有一个很好的示例,请查看

另类

如果出于某种原因确实需要使用活动,则可以通过在打开每个活动的意图中向extras bundle添加值,或者通过扩展类,在它们之间传递信息


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

您还可以使用静态类或共享引用在选项卡之间传输数据。 正确的方法是在创建选项卡的活动中设置一个静态字段

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

我确实不鼓励您通过扩展应用程序类来使用全局变量。如果您的应用程序转到后台(例如,由于一个电话),android系统可能会决定终止您的应用程序。调用完成后,应用程序和活动堆栈将恢复,但活动状态将丢失

我建议您使用广播向其他活动发送数据

在您的Tab1Activity中:

Intent dataIntent = new Intent();
dataIntent.setAction("com.your.app.DATA_BROADCAST");
dataIntent.putExtra("tag", "your data");
sendBroadcast(dataIntent);
表2活动:

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);

为什么不使用静态字段、getter和setters@sandy因为这是错误的。。。