如何在其他活动中使用全局变量

时间:2018-09-12 08:09:30

标签: android kotlin global-variables

我试图从另一类的一个类中获取全局变量,但它只是给我一个空字符串。

class Abfahrtsmonitor : AppCompatActivity() {

    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val Haltestellenname = MapsAnzeigeActivity().haltestellen_name
    }
}

是我想要的。我的课程MapsAnzeigeActivity大致如下:

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    var haltestellen_name = "" 

    override fun onCreate(savedInstanceState: Bundle?) {
        // ....
    }

    fun changeHaltestellen() {
        haltestellen_name = "new"
    }
}

3 个答案:

答案 0 :(得分:2)

运行此代码时:

val Haltestellenname = MapsAnzeigeActivity().haltestellen_name

它将创建一个MapsAnzeigeActivity的新实例,因为haltestellen_name的默认值为"",这就是为什么您得到一个空字符串的原因。

要创建全局变量(在Java中称为静态变量),应使用Companion Object

class MapsAnzeigeActivity : AppCompatActivity(), OnMapReadyCallback {
    companion object {
       var haltestellen_name: String
    }
}

class Abfahrtsmonitor : AppCompatActivity() {
    // Initializing an empty ArrayList to be filled with animals
    val Haltestellen: ArrayList<String> = ArrayList()
    val Haltestellenname = MapsAnzeigeActivity.haltestellen_name
}

答案 1 :(得分:1)

尝试一下:

<div class='main'>
  <div class='main__inner'>
    <div class='left'>left</div>
    <div class='center'>center</div>
  </div>
</div>

答案 2 :(得分:1)

您可以选择执行以下操作:

首先,您可以拥有一个这样的单例类,并在需要时获取数据。

public class MyData {

    private ArrayList<String> data;
    private static MyData INSTANCE = new MyData();
    private MyData() {

    }

    public static MyData getInstance() {
           return INSTANCE;
    }

    public ArrayList<String> getData() {
           return this.data;
    }

}

如果您想获取数据,请尝试以下代码:

MyData.getInstance().getData() 

它将把您的数据保存在内存中,当您关闭应用程序时,您的数据将丢失。

另一种选择是将数据保存在SharedPrefs或Sqlite中,它的好处是即使关闭应用程序也可以获取数据。

另一种简单的方法是像这样使您的数据保持静态。

public static ArrayList<String> data = new ArrayList();