我是黑莓手机的新手。我如何(在BlackBerry中)实现与Android的相同
intent.putExtra("key","value");
将可以在下一个推送屏幕上接收的值放入BlackBerry。
就像来自ActivityOne
的Android -
Intent intent = new Intent(this, ActivityTwo.class);
intent.putExtra("Value1", "This value one for ActivityTwo ");
intent.putExtra("Value2", "This value two ActivityTwo");
startActivity(intent);
<{1>} - 中的
ActivityTwo
黑莓手机有可能吗?如果是,那我该怎么做?
答案 0 :(得分:3)
使用public static
个变量(如Ganesh的答案)会起作用,但总的来说,这不是我推荐的面向对象模式。
幸运的是,这个可以在BlackBerry中比在Android中更容易。对于许多Java开发人员来说,Android的Intent
机制实际上有点不自然。当一个Activity
通过Activity
启动另一个Intent
时,它实际上new
不会(创建)第二个Activity
的实例,它也不会保持对该对象的普通Java引用。如果确实如此,这个问题就会简单得多。 Android的实施会强制您使用 intent extras 机制。
如果您的旧ActivityOne
课程成为BlackBerry的ScreenOne
,ActivityTwo
成为ScreenTwo
,那么您可以执行以下操作:
public class ScreenTwo extends Screen {
private String _value1; // this doesn't have to be a String ... it's whatever you want
private String _value2;
public void setValue1(String value) {
_value1 = value;
}
public void setValue2(String value) {
_value2 = value;
}
}
然后,在ScreenOne
中,您可以这样开始ScreenTwo
ScreenTwo nextScreen = new ScreenTwo();
nextScreen.setValue1("This value one for ActivityTwo");
nextScreen.setValue2("This value two ActivityTwo");
UiApplication.getUiApplication().pushScreen(nextScreen);
这实际上与Java对象的正常使用方式更加一致,并且彼此交互。
Android提出Intents
和附加功能的原因很充分,但在BlackBerry中,您不必担心这一点。
编辑:我正在考虑我认为是以下史密斯先生评论背后的动机。如果您真的喜欢Android Intent
extras机制,因为您可以将多个数据类型从一个Activity
传递到另一个{KEY,作为键值对,那么您当然可以在BlackBerry中实现类似的功能。您可以使用以下ScreenTwo
代码而不是上面的public class ScreenTwo extends Screen {
private Hashtable _extras;
public void putExtras(Hashtable extras) {
_extras = extras;
}
}
代码:
put(Object, Object)
将Hashtable
键值对数据转换为传递到被调用屏幕的public class ScreenTwo extends Screen {
private Hashtable _extras;
public void putExtra(String name, Object value) {
_extras.put(name, value);
}
}
,然后在需要时将其读取。甚至:
{{1}}
答案 1 :(得分:1)
这值得设计一次因为你将在大多数项目中结束使用它。
首先,没有内置机制,例如BB中的Android,但你可以(并且应该)编写自己的代码:
public class MyScreen extends MainScreen {
public void updateParams(Hashtable params){
// Read from hashtable and cast
// Update fields (on Ui thread)
}
}
正如您所看到的,我使用了哈希表,因为它是最灵活的方式。您可以使用setter,但随后您将调用屏幕与更新的屏幕类耦合。这允许您传递一个或多个参数。您可以使用Object[]
,从而节省一些引用,但是这种优化几乎不会得到回报,并且您将耦合到数组的长度以及数组内对象的顺序。现在,要将两个参数传递给屏幕,您可以这样做:
Hashtable ht = new Hashtable();
ht.put("somestring", "Hello!");
ht.put("someint", new Integer(3));
MainScreen ms = new MyScreen();
targetscreen.updateParams(ht);
// Now push screen
你也可以像这样创建一个构造函数:
Myscreen(Hashtable params)
但这会强制您在每次需要使用新数据更新屏幕时创建新实例。使用该方法,您可以更新已在堆栈中的屏幕。
这是一种可以在许多项目中重复使用的方法。实际上,大多数时候你都会以MainScreen为子类化来抽象和简化重复性任务,例如菜单创建和处理按键,所以这将是该子类的一部分。
答案 2 :(得分:0)
创建一个公共类,
public class Values
{
public static String value1 ="";
public static String value2 ="";
}
现在你可以在任何地方访问value1和value2。
在按下下一个屏幕之前,分配值。
public class MyClass extends UiApplication
{
MyClass mc = null;
public static void main(String args[])
{
mc = new MyClass();
if (MyClass != null)
{
mc.enterEventDispatcher();
}
}
public MyClass()
{
Values.value1 ="HI"
Values.value2 ="Welcome"
this.pushScreen(new SplashScreen());
}
在另一个课程中,你可以访问它。
public class Splashscreen()
{
public Splasscreen()
{
if(!Values.Value1.equalIgnoreCase("")
{
Syso(""+Values.value1) ;
}
}