Android开发:从Main活动访问对象的LinkedList(在Application类中定义)

时间:2013-02-07 15:47:54

标签: java android object linked-list

从早期的一个帖子开始,我想知道创建链表并让它们在多个活动中保持一致。有人建议我扩展应用程序类来做这个,所以我决定研究它。

我已经这样做了,假设我没有弄乱它,应用程序现在应填写一个链接列表,其中包含我希望在主要活动中使用的一些示例数据。但我似乎无法访问数据,我有点难过。

刚开始使用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();

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

    private static GlobalData singleton;

public static GlobalData getInstance() {
    return singleton;
}

那么你也不需要类Employee来扩展Application,它只是一个数据模型类。 然后,您将在所有应用程序实时循环中拥有一个GlobalData类的实例(只有一个实例),因此您只需调用应用程序中的每个活动/类/等:

GlobalData.EmployeeList.get(0)

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

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

希望得到它的帮助。

答案 1 :(得分:0)

我认为你应该看看Parcelable。

另一篇文章提到here

示例here