2012-06-15 2 views
4

В моем приложении для Android я должен использовать общее строковое значение для всех действий. «commonValue» - это общее строковое значение, которое я хочу использовать во всех действиях. Соответствующий код основной деятельности, как это:Android: Передача значения между действиями

public class TestActivity extends Activity { 

public String commonValue;//THE COMMON STRING FOR ALL ACTIVITIES 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    commonValue = "DemoValue"; 
    } 
} 

В моей следующей деятельности я создал объект «TestActivity» класса и пытался присвоить «TestValue» строку в другую строку с именем «ул»

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testlist); 

    TestActivity obj = new TestActivity();//OBJECT OF MAIN ACTIVITY 
    String str = obj.commonValue; 
} 

, но значение «str» во второй активности не равно значению, присвоенному в моем первом действии. Почему это & Как я могу это сделать?

Спасибо!

+1

объявить ** общественное Струнный commonValue ** к ** общественности статической строки commonValue; ** или использовать shared preferece, поскольку sana предложила – Akram

+0

Это невозможно сделать таким образом? – Grant

+0

Вы можете использовать класс приложения для обмена данными между действиями .. Проверьте это: http://stackoverflow.com/questions/10599775/how-do-i-make-global-changes-throughout-my-app-in-android/ 10599919 # 10599919 – Venky

ответ

1

Попробуйте это -

TestActivity.java

public class TestActivity extends Activity { 

public static String commonValue;//THE COMMON STRING FOR ALL ACTIVITIES 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    commonValue = "DemoValue"; 
    } 
} 

другая деятельность

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.testlist); 

    String str = TestActivity.commonValue; 
} 
+0

Нет необходимости создавать новый экземпляр TestActivity, так как вы обращаетесь к нему переменная класса. – Tim

+1

Да, теперь все в порядке - лучше для кучи, чтобы уменьшить создание объекта. 0: – Tim

+1

Это сработало для меня :) Спасибо! – Grant

3

Начните использовать SharedPreferences в своем приложении.

В вашей первой деятельности вы могли бы сделать

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
SharedPreferences.Editor editor = settings.edit(); 
editor.putString("commonValue", "DemoValue"); 
editor.commit(); 

В вашей второй активности

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
String str = settings.getString("commonValue", null); 
+0

Спасибо за ваш ответ! Я уже протестировал этот путь, и мне просто нужно было это сделать :) – Grant

+0

Ваш ответ прекрасен ... но я не хотел использовать общие настройки. :) – Grant

+0

О! Если бы вы сообщили мне, я бы поставил статический метод объекта :(, я голоден для повторений ... применяю к заданиям: | – Sana

1

Если значение всегда то же самое вы можете создать переменную public static final и доступ к нему через TestActivity.COMMON_VALUE.

Если вы хотите передать значение между действиями, вы должны использовать Intents и добавить дополнительное значение, которое вы хотите передать.

+0

В ответ на ваш комментарий о ответе SpK о том, что он был заблокирован, это был я. объяснил ему, ваш ответ звучит для Java в целом, но класс Android «Активность» - это особый случай, и создание статических полей, которые будут доступны из одной «Activity» другой, действительно не является хорошей практикой. Если появится новый Android-программист вниз по этому маршруту и ​​ожидайте, что 'Активность' будет вести себя так же, как с любым классом Java, тогда все будет плохо ошибочно. – Squonk

+0

Привет, Squonk, я опубликовал способ Android и способ Java - так что нет причин для downvote. В Android часто бывает так, что вы создаете какой-то класс констант, в котором используются общие константы. – Tim

+0

Привет, Тим. Боюсь, это было первое предложение, которое вызвало понижение. Я согласен, что вы указали передачу данных с использованием намерений, но идея объявление CO MMON_VALUE' как поле 'static'' Activity' (TestActivity в случае OP) - неправильный подход. Я согласен, что класс «константы» не является проблемой, и я сам использую их ... просто не статические поля в «Деятельности». – Squonk

0

Как предложила Сана, используйте SharedPreferences.

В качестве альтернативы используйте глобальный постоянный класс. Если вы хотите придерживаться того, что у вас есть, то вы можете попробовать: String str = TestActivity.this.commonValue;

Ваш существующий код создает новый экземпляр активности, поэтому он не будет иметь значение, которое вы установили.

4

Поместите значение в string.xml

<string name="common_value">DemoValue</string> 

и использовать в любой деятельности, как это ..

String common_value = getApplicationContext().getString(R.string.common_value); 
+0

Это всегда требовало наличия контекста - я бы постарался избежать этого. – Tim

+0

@TimMesserschmidt, тогда в чем проблема, поскольку требуется контекст всегда? –

+0

Вам всегда нужно перетаскивать контекст - например, в WorkerThread. Я предпочитаю использовать strings.xml для строк пользовательского интерфейса. – Tim

0

Для передачи данных между деятельность с использованием Bundle. и методы,

intent.putExtra() 

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

0

У нас есть файл приложение для каждого приложения вы можете объявить переменную там и как файл приложение может получить от любой деятельности, поэтому использование сеттера общественного геттер и может получить/установить, что

есть vaious OTER metjod вам может подать в суд, как упоминание о developer.androidhttp://developer.android.com/resources/faq/framework.html

Singleton class 
A public static field/method 
A HashMap of WeakReferences to Objects (almost same as my above solution) 
Persistent Objects 

взглянуть на них, а

0

причина, почему commonValue не равно, что вы установили в методе OnCreate TestActivity, потому что тха t функция еще не вызывается.

Решение для этого уже упоминалось другими. Как положить значение в связку.

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