如何使用的Java / Android的标签之间的意图是什么?
-
27-09-2019 - |
题
我需要知道如何处理标签的意图。例如,我有两个选项卡的标签活动。首先内容是文本视图。另一个是一个地图视图。当我点击的文本视图其重定向到TAB2。它可以通过setCurrentTab(1)或setCurrentTabByTag( “TAB2”)的方法来容易地实现。但我想lat和长值传递给地图活动砸脚。什么是使用意图或的getter / setter Java中的更好的办法?你喜欢哪个?如果你的答案是“意图”。怎么样?
解决方案
一个有趣的问题。我的理解是要改变在第一TabView的点击第二个选项卡,还特别的数据传递给依赖于第一标签中的作用的第二个选项卡。
我一般会开始一个活动标签内的意见。然而,这是在标签主机配置瞬间完成。这意味着双方的意图之一,让用户的活动选择LAT长,一个节目Lat Long网是在同一时间双头呆。
因此不能将信息添加到所使用并初始化的标签主机的意图。 我不喜欢的解决方案,但认为在我脑海中的唯一的事情(使用不同的活动,为选项卡)使用自定义的应用其存储到包含数据,你需要更新在第二个选项卡的视图的对象的引用。你必须用自己的类扩展的应用程序,并在您清单中添加这个类,现在你可以调用getApplication在第一个选项卡丢给你的应用程序类组lat和长调用setCurrentTab之前。在第二个选项卡,你可以调用 getApplication ()一次,然后你会得到的应用程序对象,它是在你的应用程序运行的每一刻,每一个活动一样。然后,您可以再次将它转换到应用程序中的对象并获取经纬度和长期价值。看到这个页面在谷歌的裁判如何使用自定义应用程序的类。
要使用自定义的应用程序类中添加以下到您的应用程序标记在您的清单:
<application
...
android:name=".somepackage.CustomAppClass"
这将告诉安卓此刻你的应用程序开始实例化CustomAppClass为您的应用程序类。您需要延长,以避免错误的应用程序在启动时。
另一种解决方案,但不是我宁愿是自己初始化的意见和享有,而不是活动初始化tabhost。与在标签中的一个的地图视图,这可能是非常重存储器
其他提示
如果你想通过活动之间的值,我建议在看
http://developer.android.com/reference/android/content /SharedPreferences.html
要得到的值从一个itent到另一个的最佳方式。
使用sharedPrefrences,有类为整个应用程序,这意味着可以存储在文件开关意图值,或活动,然后记得,具有在其中的数据的那些sharedPrefrence文件。只有一个实例p>
唯一的缺点是,你必须通过基本类型(int,字符串,布尔),但我敢肯定你会想出解决这个方法:。)
我没有看到这里的问题: 也许它的hackish,但下面的代码的一点点对我的作品:
public boolean onClick(View v) {
//get your data you wanna send.
//If it is an Object it would be good if it is Parcelable
Object o = getYourData();
// or Parcelable p = getYourData
Activity activity = getParent();
//I'm assuming were inside an Activity which is started by TabActivity
if (activity instanceof TabActivity){
TabActivity ta = (TabActivity)activity;
//now determine the Tab you wanna start
ta.getTabHost().setCurrentTabByTag("yourTag");
//or ta.getTabHost().setCurrentTab(yourID);
Activity current = ta.getCurrentActivity();
//check if the Activity is the one you wanna start
if (current instanceof YOUR_ACTIVITY_YOU_WANNA_START){
//Cast to your Activity
YOUR_ACTIVITY_YOU_WANNA_START yourActivity =
(YOUR_ACTIVITY_YOU_WANNA_START)current;
// you only need to put Data inside your Intent
Intent intent = new Intent();
intent.putExtra("EXTRA_DATA_TAG", o);
//your Activity must Override onNewIntent and make it public,
//or simply add another method
//with whatever You like as parameter
yourActivity.onNewIntent(intent);
return true;
}
}
return false;
}
这样你就不必使用应用程序,SharedPrefs或其他unnessesary乱七八糟的东西在这里提到的
如果你让你使用启动第二个选项卡活动的全局意图。
意图您可以再添加额外的这个意图在第一个选项卡的onPause()
。注意:你必须定义在不同的activitys所有标签比你tabhost TabActivity
作为本次活动的onPause()
从未被称为
这也有助于与上面,如果你正在使用保存在活动的全局变量扩展应用程序,你可以因为它是发射设置这个在onPause()
答案的前的活动切换,其中,如果设置此别处你可能会发现一个问题