我对黑莓新手。 如何实现(黑莓)相同,Android的的
intent.putExtra("key","value");
把可以在黑莓手机的下一个推屏幕上接收到的值。
像Android的从ActivityOne
-
Intent intent = new Intent(this, ActivityTwo.class);
intent.putExtra("Value1", "This value one for ActivityTwo ");
intent.putExtra("Value2", "This value two ActivityTwo");
startActivity(intent);
在ActivityTwo
-
Bundle extras = getIntent().getExtras();
if (extras == null) {
return;
}
// Get data via the key
String value1 = extras.getString(Intent.EXTRA_TEXT);
if (value1 != null) {
// Do something with the data
}
在黑莓手机可能这样的事情? 如果是的话我怎么做呢?
使用public static
变量(如Ganesh的答案)会的工作,但在一般情况下,这并不是说我会建议一个面向对象的模式。
幸运的是,这可以在黑莓手机比Android的更容易。 Android的Intent
机制实际上是有些不自然了许多Java开发人员。 当一个Activity
启动另一个Activity
通过一个Intent
,它实际上并没有new
了(创建)第二个实例Activity
,也未持有正常的Java引用到该对象。 如果有,这个问题就会简单得多。 Android的实施强迫你使用意图额外机制。
如果你的老ActivityOne
类成为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对象的方式更加一致,并与人交往。
还有就是为什么安卓取得很好的理由Intents
和群众演员 ,但在黑莓,你不担心这一点。
编辑:我想考虑一下,我认为是落后下面史密斯先生的评论的动机。 如果你真的喜欢Android的Intent
在这个意义上额外的机制,你可以从一个传递多个数据类型的Activity
到另一个,作为键值对,那么你肯定能实现黑莓类似的东西。 取而代之的是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);
}
}
这是值得设计以及曾经因为你最终使用它的大多数项目。
首先,无有作为Android在BB没有内置的机制,例如,但你可以(也应该)代码自己:
public class MyScreen extends MainScreen {
public void updateParams(Hashtable params){
// Read from hashtable and cast
// Update fields (on Ui thread)
}
}
正如你所看到的,我已经使用了哈希表,因为这是最灵活的方式。 你可以使用setter方法,但随后你会调用屏幕被耦合到更新的屏幕类。 这使您可以通过一个或几个参数。 你可以使用一个Object[]
,从而节省了一些参考,但优化几乎不负有心人,你会被连接到阵列的lenght以及在阵列中的对象的顺序。 现在,两个参数传递到屏幕上,你会怎么做:
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抽象和简化像菜单创建和处理按键重复的任务,因此这将是该子类中的一部分。
创建一个公共类,
public class Values
{
public static String value1 ="";
public static String value2 ="";
}
现在ü可以访问值1,和值2中的任何位置。
前推下一屏幕,分配值。
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());
}
在另一个U类可以访问它。
public class Splashscreen()
{
public Splasscreen()
{
if(!Values.Value1.equalIgnoreCase("")
{
Syso(""+Values.value1) ;
}
}