Я пытаюсь Google University Android lab1 вас попросят изменить текстовое содержимое TextView в соответствии со значением, переданным через Intent из другого деятельность.
Я пробовал остальную часть своего кода, но... почему моя приложение закрывается, когда я добавляю строку tv.settext(...)??
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/*
* Fetch and display passed string.
*/
TextView tv = (TextView) findViewById(R.id.HelloTV);
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
String nameStr = extras.get("Username").toString();
if (nameStr != null) {
tv.setText("Hello "+nameStr);
}
}
setContentView(R.layout.main);
}
}
Глядя на журнал ошибок, и даже лучше, глядя на сеанс отладки - можно видеть, что в строке 22 есть исключение с помощью null-указателя:
tv.setText("Hello "+nameStr);
Это потому, что tv == null. Он должен быть инициализирован линией:
TextView tv = (TextView) findViewById(R.id.HelloTV);
но для использования идентификатора в макете вы всегда должны регистрировать представление в текущей активности. Эта строка должна была быть включена в начале метода onCreate:
setContentView(R.layout.main);
Вот рабочий класс Helloworld:
public class HelloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/*
* Fetch and display passed string.
*/
TextView tv = (TextView) findViewById(R.id.HelloTV);
Bundle extras = this.getIntent().getExtras();
if (extras != null) {
String nameStr;
if (extras.get("Username") != null) {
nameStr = extras.get("Username").toString();
tv.setText("Hello "+nameStr);
}
}
}
}
Этот класс Helloworld корректно извлекает имя пользователя из дополнительных данных, отправленных при запуске действия, и отображает персонализированное приветствие.
Я нашел ответ благодаря Константину Бурову и предыдущему вопросу здесь
У вас есть только один .xml файл в папке Layout проекта? если у вас есть xml файл для основной активности и один файл fragment.xml, поскольку он предлагается обновленным eclipse, вам необходимо выполнить setText внутри автоматически созданной функции onCreateView. Здесь объединен фрагмент (который содержит элементы представления) и основной макет. поэтому найдите строку ниже в своем коде или создайте ее:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) { ... }
а затем установите текст или другие требуемые элементы вашего представления (например, btn, textView...) внутри этой функции. например:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
//set the text of textView
TextView txvMain = (TextView) rootView.findViewById(R.id.txvMain);
txvMain.setText("SetText works now");
//set a drawable as the background of the textView
txvMain.setBackgroundResource(drawable.ic_launcher);
return rootView;
}
Я буду ждать дальнейших вопросов. рассматривает