BlackBerry - 如何在Android中传递Intent.putExtra()等数据

时间:2012-07-07 13:11:57

标签: android android-intent blackberry

我是黑莓手机的新手。我如何(在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

黑莓手机有可能吗?如果是,那我该怎么做?

3 个答案:

答案 0 :(得分:3)

使用public static个变量(如Ganesh的答案)会起作用,但总的来说,这不是我推荐的面向对象模式。

幸运的是,这个可以在BlackBerry中比在Android中更容易。对于许多Java开发人员来说,Android的Intent机制实际上有点不自然。当一个Activity通过Activity启动另一个Intent时,它实际上new不会(创建)第二个Activity的实例,它也不会保持对该对象的普通Java引用。如果确实如此,这个问题就会简单得多。 Android的实施会强制您使用 intent extras 机制。

如果您的旧ActivityOne课程成为BlackBerry的ScreenOneActivityTwo成为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)   ;
}
}