【问题标题】:Android Development: Accessing LinkedList of objects (defined in Application class) from Main activityAndroid 开发:从 Main Activity 访问对象的 LinkedList(在 Application 类中定义)
【发布时间】:2013-02-07 15:47:53
【问题描述】:

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

我已经这样做了,假设我没有把它弄得一团糟,应用程序现在应该用一些我希望在主要活动中使用的示例数据填充一个链表。但我似乎无法访问数据,我有点难过。

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

有什么想法吗?

【问题讨论】:

    标签: java android object linked-list


    【解决方案1】:

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

        private static GlobalData singleton;
    
    public static GlobalData getInstance() {
        return singleton;
    }
    

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

    GlobalData.EmployeeList.get(0)
    

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

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

    希望有帮助。

    【讨论】:

    • 对于单身人士,我在技术上不是已经这样做了吗?我曾考虑过为 Employee 取消单独的类,并在 GlobalData 类中使用一些方法来实现。
    • 好吧,是的,不是的,我不知道你想要实现什么,只是给你一个我认为你想要的基于示例的工作示例(包括名称)。我的意思是你不需要这样做:globalData = (GlobalData)getApplication(); 只需在你的应用程序中直接使用你的类,它的实例存在于你的整个应用程序中,我的意思是用我放在那里的代码你可以直接在GlobalData.EmployeeList.getFirst();每个你需要的地方
    【解决方案2】:

    我认为你应该看看 Parcelable。

    另一个帖子提到它here

    一个例子here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多