Android setText() перезаписывается?

Я немного новичок в программировании на Android, и я хочу просто отправить текст на экран. Эта возможность должна быть при включении и выключении экрана. Когда вы включаете его, на экране отображается отметка времени его включения и 1. Кроме того, когда вы выключаете его, на экране печатаются отметка времени, когда он выключается, и 0. У меня есть небольшая проблема, просто "добавление" к предыдущей отметке времени, что означает, что я хочу непрерывно записывать, когда экран Android выключен и когда экран включен. Он продолжает перезаписывать себя. Вот моя попытка:

protected void onResume(){ //this is for when the screen is turned back on
    Time now = new Time();
    if(!ScreenReceiver.screenOn){
        now.setToNow();
        String lsNow = now.format("%m-%d-%Y %I:%M:%S");
        LinearLayout lView = new LinearLayout(this);
        myText = new TextView(this);
        myText.setText(lsNow + ", 1");
        lView.addView(myText);
        setContentView(lView);
... //more code here
}

 protected void onPause(){
    Time now = new Time();
    if(ScreenReceiver.screenOn){
        now.setToNow();

        String lsNow = now.format("%m-%d-%Y %I:%M:%S");
        LinearLayout lView = new LinearLayout(this);
        myText = new TextView(this);
        myText.setText(lsNow + ", 0");
        lView.addView(myText);
        setContentView(lView);
...//more code here
}

Если кто-нибудь знает решение, это было бы здорово! Спасибо!

2 ответа

Решение
  1. Вы создаете новый макет, а затем настраиваете представление контента для этого макета, имеет смысл, что будет перезаписан не только TextView, но и все остальное, поскольку весь макет заменяется. Вместо этого продолжайте использовать один TextView с одним макетом.
  2. Есть append() метод в TextView для добавления.

Я также сделал бы общий метод:

public void logTime (boolean screen)
{
  Time now = new Time();
  now.setToNow();

  String lsNow = now.format("%m-%d-%Y %I:%M:%S");
  TextView myText = (TextView) findViewById (R.id.myText);
  myText.append (" " + lsNow + (screen ? "0" : "1"));
}

Тогда позвони с ScreenReceiver.screenOn в качестве параметра.

Ваш код в настоящее время сбрасывает весь макет действия при возобновлении и паузе. Когда вы звоните setContentView вы по сути меняете старый макет на новый, созданный вами. Создайте один макет в папке ресурсов, а затем в деятельности onCreate позвонить setContentView метод. После этого используйте FindviewById<TextView> чтобы получить ссылку на TextView в вашем макете. Вам нужно будет передать идентификатор элемента, как вы объявили его в файле макета.

Чтобы добавить текст в элемент управления, вы должны использовать текущий текст, а затем добавить к нему новую информацию: textView.setText(textView.getText() + "new text") так что старые данные не переопределяются.

Другие вопросы по тегам