Изменение текстового представления в отдельном действии в Android - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть страница входа в систему, которая извлекает информацию из базы данных, и затем я хочу использовать эту часть этой информации, чтобы заполнить различные текстовые представления на новой странице / деятельности. Я могу получить текстовое представление для изменения действия, в котором у меня есть кнопка «Отправить», но когда я пытаюсь изменить текстовое представление для моего второго действия, оно просто падает (приложение неожиданно остановилось).

Вот мой код для изменения просмотра текста (где txtID - это мой просмотр текста в отдельном упражнении)

TextView test2 = (TextView) findViewById(R.id.txtID);
test2.setText(test);

мой xml для отдельной деятельности

<TextView android:text="TextView" android:id="@+id/txtID"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>

О, я использую таблицу для моей страницы входа, а затем вкладки для остальных моих страниц. Я довольно новичок в этом, так что извините, если это что-то простое, но любая помощь будет принята с благодарностью! : -)

Ответы [ 3 ]

7 голосов
/ 05 апреля 2011

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

Скажем, у нас есть действие A, и у него есть некоторая информация в виде строки, которую он хочет передать, чтобы стать текстом TextView в действии B.

//Setup our test data
String test = "Some text";
//Setup the bundle that will be passed
Bundle b = new Bundle();
b.putString("Some Key", test);
//Setup the Intent that will start the next Activity
Intent nextActivity = new Intent(this, ActivityB.class); 
//Assumes this references this instance of Activity A
nextActivity.putExtras(b);

this.startActivity(nextActivity);

Итак, теперь в методе onCreate для действия B мы можем получить эту строку и назначить ее в качестве текста для TextView, как у вас

public void onCreate(Bundled savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main); //Setup some layout, set to your own

    String test = getIntent().getExtras().getString("Some Key");
    TextView test2 = (TextView) findViewById(R.id.txtID);
    test2.setText(test);     
}
0 голосов
/ 05 апреля 2011

Энди ... Если вы попытаетесь напрямую дотронуться до виджета пользовательского интерфейса в другом действии, ваше приложение потерпит крах. Был там, сделал это случайно. Вместо этого рассмотрите возможность передачи неизменяемого объекта с состоянием между действиями. Это может быть сделано, используя startActivityForResult, например. У меня есть пример кода здесь .

0 голосов
/ 05 апреля 2011

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

В учебном пособии «Блокнот» демонстрируется приложение с двумя действиями, где одно действие вызывает другое, передавая данные. (Взгляните на onListItemClick в Notepadv3.) Возможно, вы могли бы следовать этой модели для передачи данных из упражнения 1 в упражнение 2, где затем занятие 2 позаботится о его правильном отображении, используя полученные данные.

Если у вас все еще есть проблемы (например, сбой приложения), пожалуйста, опубликуйте полный минимальный код, необходимый для воспроизведения вашей проблемы. Обратите внимание, что в учебнике по блокнотам и в учебнике Hello, World содержатся шаги по отладке, которые могут помочь вам точно определить проблему.

...