黑莓 - 如何通过像Intent.putExtra()在Android的数据(BlackBerry

2019-07-30 07:10发布

我对黑莓新手。 如何实现(黑莓)相同,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
} 

在黑莓手机可能这样的事情? 如果是的话我怎么做呢?

Answer 1:

使用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); 
   }
}


Answer 2:

这是值得设计以及曾经因为你最终使用它的大多数项目。

首先,无有作为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抽象和简化像菜单创建和处理按键重复的任务,因此这将是该子类中的一部分。



Answer 3:

创建一个公共类,

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


文章来源: BlackBerry - how to pass data like Intent.putExtra() in Android