gpt4 book ai didi

java - 安卓开发: Accessing LinkedList of objects (defined in Application class) from Main activity

转载 作者:行者123 更新时间:2023-12-02 07:17:26 26 4
gpt4 key购买 nike

继之前的线程之后,我想知道如何创建链接列表并让它们在多个 Activity 中持久存在。有人建议我扩展应用程序类来执行此操作,因此我决定研究一下。

我已经这样做了,假设我没有把它弄乱,应用程序现在应该用我希望在主要 Activity 中使用的一些示例数据填充链接列表。但我似乎无法访问数据,我有点困惑。

刚刚开始 Android 开发,如果这是一个荒谬的问题,我很抱歉。不管怎样,这就是我到目前为止所拥有的。

扩展类GlobalData

package com.example.employeeList;

import java.util.LinkedList;
import android.app.Application;
import android.widget.Toast;

import com.example.employeeList.Employee;

public class GlobalData extends Application {

public LinkedList<Employee> EmployeeList;

@Override
public void onCreate(){
super.onCreate();
createEmployeeLinkedList();
}

public void createEmployeeLinkedList(){
// create a linked list
Employee emp1 = new Employee("John");
Employee emp2 = new Employee("Bob");
Employee emp3 = new Employee("Fred");

LinkedList<Employee> EmployeeList = new LinkedList<Employee>();
EmployeeList.add(emp1);
EmployeeList.add(emp2);
EmployeeList.add(emp3);

// The following code works, used for testing to see if linklist was actually being created.
// Employee boo = newEmployee();
// Employee boo = EmployeeList.getFirst();
// Toast.makeText(getApplicationContext(), "("+boo.name+")" ,Toast.LENGTH_LONG).show();
}

}

员工

package com.example.employeeList;

import android.app.Application;

public class Employee extends Application{

public String name;

public Employee(String name) {
this.name = name;
}
}

MainActivity

package com.example.employeeList;

import android.os.Bundle;
import android.app.Activity;
import android.widget.TextView;
import android.widget.Toast;
import com.example.employeeList.Employee;

public class MainActivity extends Activity {

protected GlobalData globalData;

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

// Get the application instance
globalData = (GlobalData)getApplication();

//Would have thought I could just do this but apparently not.
Employee boo = globalData.EmployeeList.getFirst();
Toast.makeText(getApplicationContext(), "("+boo.name+")" ,Toast.LENGTH_LONG).show();

}
}

违规行似乎是

 Employee boo = globalData.EmployeeList.getFirst();
Toast.makeText(getApplicationContext(), "("+boo.name+")" ,Toast.LENGTH_LONG).show();

有什么想法吗?

最佳答案

尝试使 GlobalData 成为 Application 类中的单例,在 GlobalData 类中添加如下内容:

    private static GlobalData singleton;

public static GlobalData getInstance() {
return singleton;
}

那么你也不需要类 Employee 来扩展 Application,它只是一个数据模型类。然后,您将在所有应用程序生命周期中拥有 GlobalData 类的一个实例(只有一个实例),因此您可以调用应用程序中的每个 Activity/类/等,如下所示:

GlobalData.EmployeeList.get(0)

或者类似的东西,就这么简单。

请注意,当您的应用程序启动时,您的 GlobalData 类将被实例化,并且您将在 OnCreate 方法中创建列表,并且它在应用程序执行的整个过程中都将“Activity ”。您也可以在您的类中使用 Application 类中的 OnPause 和 OnResume 方法来与应用程序状态更改进行交互。

希望有帮助。

关于java - 安卓开发: Accessing LinkedList of objects (defined in Application class) from Main activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com