2012-03-16 3 views
6

Я разрабатываю приложение для Android. У меня есть некоторые действия в нем. И у меня должен быть объект, который может быть доступен из всех видов деятельности. Любые идеи, как его организовать?Глобальный объект приложения android

+0

Что вы подразумеваете под "глобальным объектом"? Если вы имеете в виду класс, доступный по всему приложению, то посмотрите на эту тему http://androidforums.com/developer-101/124278-global-objects.html – evilone

+0

В моей ситуации это должен быть объект некоторого класса. Во всех действиях я должен использовать методы этого объекта, добавлять данные в поля объекта и т. Д. – mmmaaak

ответ

11

Используйте глобальный Application объект следующим образом:

package com.yourpackagename; 

public class App extends Application { 
} 

В AndroidManifest.xml:

<application android:name=".App"> 

Чтобы получить доступ к нему из Activity:

App globalApp = (App) getApplicationContext(); 

App класс будет автоматически запускается при запуске приложения. Он будет доступен до тех пор, пока процесс подачи заявки будет активным. Он может выступать в качестве глобального магазина, в котором вы можете разместить свои вещи и иметь доступ к ним на протяжении всей жизни приложения.

+0

Я чувствую, что в этом есть некоторые опечатки, но я не знаю, какие из них исправить!:) –

+1

исправлены опечатки. не стесняйтесь комментировать, если я ничего не пропускаю. –

+0

Ваше начальное определение класса - 'GolbalObject', но ваше использование -' GlobalObject' .. –

3

Существует несколько способов сделать это. Если объект, который вы хотите использовать, является строкой (или легко описывается с помощью String), я бы порекомендовал Shared Preferences. Он служит хранилищем ключей для обмена данными в приложении.

Если это не так (т. Е. Пригодность String), вы можете рассмотреть возможность передачи его в качестве дополнительного с помощью Intent, который запускает ваши различные действия. Например:

Intent newActivity = new Intent(CurrentActivity.class, ActivityToLaunch.class); 
newActivity.putExtra("object_key", Bundle_With_Your_Object); 

Для получения более подробной информации по этой стратегии (особенно о классе Bundle, если вы не знакомы), я читал this Android doc.

1

Вы можете использовать SharedPreferences в этом случае:

Для добавления или редактирования:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().putString("your_key", value).commit(); 

Для очистки:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE); 
prefs.edit().clear(); 

Чтобы получить значение:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);    
String value = prefs.getString("your_key", ""); 
+0

это предполагает, что объект, который хочет разместить плакат, представляет собой строку, которая может быть или не быть хорошим предположением; хотя, возможно, «лучшим» решением является наличие toString и конструктора, для которого Object x = new Object (y.toString()); даст x, что эквивалентно y? – mfrankli

+0

Думаю, ему нужны некоторые атрибуты объекта вместо реального объекта. Передача объекта над намерением - еще один хороший способ, но код для его отправки и обработки является сложным. – PhatHV

0

Сначала создайте класс с именем MasterActivity, который расширяет Activity и определяет ваш глобальный объект.

public class MasterActivity extends Activity 
{ 
    public Object mObject; 
} 

Затем вы должны расширить свой основной класс активности с MasterActivity, как это:

// your main activity 
public class MainActivity extends MasterActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     // you can now use mObject in your main class 
     mObject.yourmethod(); 
    } 
} 

К таким образом, вы будете иметь возможность использовать свой объект во всех ваших действиях просто путем расширения MasterActivity вместо Activity.

Смежные вопросы