当Bundle无法使用时,如何将数据从一个类传递到另一个类?

时间:2013-12-02 17:01:30

标签: android variables android-intent

我有两个课程。 A类是一个Activity,它包含需要在B类(而不是Activity)中使用的整数变量。我以前能够使用Bundles将变量数据从一个Activity转移到另一个Activity。问题是,这次,B类不是Activity并扩展了ImageView,因此可以使用draw()函数。因此,我无法使用普通的Activity函数(例如Bundle-Intents或SharedPreferences)将原始变量中的数据从A类传输到我的B类。我收到一条错误,指出“getIntent()未定义类型”。

所以我的问题是,如果我无法捆绑,B类如何使用A类中的变量?还有另一种方式吗?

有人说他们不理解我的问题所以希望下面的例子有助于更好地证明。

public Class1 extends Activity {

//so Class1 has some primitive data, and is an Activity w/layout

int var1;
int var2;
Bitmap bitmap;

@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view);
}
}

另一个类需要绘制到画布上,但也需要使用 var1和var2中的信息能够正确绘制。但是如何获得这些信息?

   public Class2 extends ImageView {

    /*I am unable to use normal Activity functions, so I 
     *cannot onCreate, for example. I also cannot bundle, 
     *getIntent(), or use getSharedPreferences(). So how do I get var1 
     *and var2 value? */

    }

更新:我能够使用getter来解决这个问题。我之前尝试过这个,但它没有返回正确的值。如果其他人遇到这个类似的问题,请记住使用“静态”设置变量。我仍在学习所有的差异,但没有静电,我的吸气剂不起作用。一旦我将静态添加到变量中,一切都会成功。所以这是一个观察性的提示(即使没有完全理解为什么的逻辑)。感谢所有响应者提供的提示。

2 个答案:

答案 0 :(得分:2)

你可以用不同的方式做到这一点 首先,您可以使用静态变量来执行此操作。这样你就可以在A类public static String variable;中声明一个变量,从B类中你可以像这样ClassA.variable获得这个变量的值。 您可以通过将类A的上下文传递给B然后使用SharedPreference来使用的另一种方法。 或者创建一个扩展android Application的新类。从A类中,您可以在应用程序类中设置不同的变量值。
现在您可以从Application类中检索这些值。希望这可以帮到你。

一些代码示例使用静态变量

public Class1 extends Activity {
public static int var1 =20;
public static int var2 = 30;
}

现在从第二类获取变量值

public Class2 extends ImageView {
Class1.var1;
Class.var2;
}

使用getter的第二种方式。

public Class1 extends Activity{
    int var1 =10;
    int var2 =20;


    public int getVar1() {
        return var1;
    }   
    public int getVar2() {
        return var2;
    }
}

现在您可以在Class2中获取变量值

public Class2 extends ImageView {
Class1 class1= new Class1();
class1.getVar1;
class1.getVar2; 
}

您也可以使用SharedPreference。希望它可以帮到你。谢谢。

答案 1 :(得分:1)

存在各种选择:

  1. Activity可以将信息传递给Class B

    class B {
        public void tellMeInformat(int usefulNumber) {
            // Do something
        }
    }
    
  2. 或者,您可以将Activity传递给ImageView:

    class A {
    
        initiation {
    
             B mySpecialImageView = /* Set it upo */;
             B.setParentActivity(this);
        }
    }
    
    class B {
        private myA = null;
    
        public void setParentActiviy {
            myA = A;
        }
    
        private void doSomething {
            int usefulNumber = A.getUsefulNumbner();
            // Do something
        }
    }
    
相关问题