0

以前のスレッドに続いて、リンクリストを作成し、それらを複数のアクティビティで永続化することについて疑問に思っていました。これを行うためにアプリケーション クラスを拡張することが提案されたので、調べることにしました。

私はそれ以来、私がそれを台無しにしていないと仮定して、これを行いました.アプリは、メインアクティビティで使用することを望んでいたいくつかのサンプルデータをリンクリストに入力する必要があります. しかし、データにアクセスできないようで、少し困惑しています。

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();

何か案は?

4

2 に答える 2

2

GlobalData を Application クラスのシングルトンにして、GlobalData クラスに次のようなものを追加してみてください。

    private static GlobalData singleton;

public static GlobalData getInstance() {
    return singleton;
}

次に、クラス Employee もアプリケーションを拡張する必要はありません。これは単なるデータモデルクラスです。次に、すべてのアプリのライブ サイクルで GlobalData クラスのインスタンス (1 つのインスタンスのみ) を作成するため、アプリ内のすべてのアクティビティ/クラス/などを次のように呼び出すことができます。

GlobalData.EmployeeList.get(0)

またはそのようなもの、それと同じくらい簡単です。

アプリの起動時に GlobalData クラスがインスタンス化され、OnCreate メソッドでリストが作成され、アプリの実行中ずっと「生きている」ことに注意してください。Application クラスの OnPause メソッドと OnResume メソッドをクラスでも使用して、アプリの状態の変化を操作できます。

その助けを願っています。

于 2013-02-07T16:49:40.200 に答える
0

Parcelable を見てみるべきだと思います。

別の投稿では、ここで言及されています。

ここに例があります。

于 2013-02-07T16:48:54.983 に答える