2013-04-30 3 views
0

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

это код кнопки от моей основной деятельности:

go = (Button)findViewById(R.id.go); 
    go.setOnClickListener(new View.OnClickListener() 
    { 

     public void onClick(View v) 
     { 
      InventoryActivity.fire.setText("1 fire"); 

     } 
    }); 

и это код от деятельности с TextView я хочу изменение:

public class InventoryActivity extends Activity 

{ 

public static TextView fire; 


@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_inventory); 


    fire = (TextView) findViewById(R.id.fire); 
    } 
} 

ок спасибо еще раз

+3

«но он закрывает мое приложение», что это значит? Сообщение об ошибке? Выход журнала? Дайте нам что-то ... – SimonSays

+0

Когда вы говорите, что оно «закрывает мое приложение, как только я говорю ему, чтобы изменить текст из другого действия», вы получаете исключение или ошибку, зарегистрированную в 'logcat'? – HeatfanJohn

+1

@SimonSays Я думаю, что нет необходимости в сообщении об ошибке здесь, так как проблема понятна. – Pragnani

ответ

3

К сожалению, вы не сможете получить доступ к объектам представления из одной активности в другой деятельности, когда текущий раздутый макет является вторым действием. More info here

Мой Рекомендуемый подход: Предполагая, что InventoryActivity будет начать SecondActivity, используйте startActivityForResult() и onActivityResult() в InventoryActivity. В вашем втором действии используйте setResult() с дополнительным строковым параметром для обновленного текста. Example here

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

+0

Внесите комбинации startActivityForResult() и onActivityResult() в свои Activites. ИМО это лучший подход. Вы не можете ссылаться на виды деятельности «Активность» за пределами действия «Владелец». Вы можете использовать статические атрибуты, но это обескураживает из-за утечек памяти. Надеюсь, поможет. – Andres

1

fire TextView в InventoryActivity будет null, пока он не получит свою ссылку в onCreate после setContentView

setContentView(R.layout.activity_inventory); это то, где ваш взгляд будет завышена и выведено на экран. , так что невозможно получить доступ к TextView fire Использовать разметку размещения.

Решение Что вы можете сделать эту вторую часть строки, которую вы хотите, чтобы показать, на втором экране в намерениях Extra и получить, что дополнительное во второй деятельности и установить его на fire TextView.

+1

Я не знаю, скажу ли я, что «Активность» в Android представляет «один экран», кажется неопределенным и, возможно, вводит в заблуждение (по крайней мере для меня), так как «Активность» может быть внедрена и быть плавающими окнами. – jnthnjns

+0

@Asok OP находится в стадии обучения, он не понимает сложных терминов и структуры, я создал это для простоты для его понимания ... Я удалил это, поскольку он – Pragnani

+0

понятен, хотя можно утверждать, что ваша установка вводит в заблуждение фундамент для OP, так как он явно новый (ish) для Android. Никакой вред, связанный с моим комментарием, я все еще + 1'd :) – jnthnjns