Android TextView.setText принудительно закрывается - PullRequest
1 голос
/ 13 сентября 2010

Я пытаюсь Google University Android lab1 вас просят изменить текстовое содержимое TextView в соответствии со значением, переданным через намерение из другого действия.

Я попробовал остальныемой код, но ... почему приложение закрывается, когда я добавляю строку "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);
    }
}

Ответы [ 2 ]

10 голосов
/ 13 сентября 2010

Просмотр журнала ошибок, а еще лучше просмотр сеанса отладки - видно, что в строке 22 есть исключение нулевого указателя:

           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 правильно извлекает имя пользователя из дополнительных данных, отправленных приначинается действие и отображается личное приветствие.

Я нашел ответ благодаря Константину Бурову и предыдущему вопросу здесь

0 голосов
/ 16 апреля 2014

У вас есть только один XML-файл в папке проекта Layout? если у вас есть xml-файл для основной деятельности и один файл frag.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;
    }

Я с нетерпением буду ждать дальнейших вопросов. С уважением

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...