Как изменить текст textView из другого класса?

283
01 сентября 2021, 23:20

У меня есть два класса, один класс MainActivity, а другой собственный класс. Мой активити класс содержит textView. Как я могу изменить текст textView из своего класса?

public class MainActivity extends AppCompatActivity {        
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView t = findViewById(R.id.textView);
        t.setText("Текст");
    }         
}
class Helper
{
    public void run()
    {
        TextView text = findViewById(R.id.textView2);
        text.setText("Второй текст");
    }
}

Исходя из ответов, я решил дописать код с некоторыми правками. Теперь создается объект класса Helper, который принимает текущее активити. При этом класс Helper наследуется от класса TimerTask, который уже не содержит в себе метода findViewById и соответственно выдает ошибку 'Cannot resolve method'. Как можно обойти этот момент?

При попытке передачи активити в класс Helper, код выполняется, но приложение моментально вылетает при попытке записать текст в поле textView2.

Пример обновленного кода:

public class MainActivity extends AppCompatActivity {
    public TextView t;
    public  TextView text;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t = findViewById(R.id.textView);
        t.setText("Текст");
        Timer timer = new Timer();
        TimerTask task = new Helper(MainActivity.this);
        timer.schedule(task, 2000, 5000);
    }
}
class Helper extends TimerTask
{
    private MainActivity activity;
    public Helper(MainActivity activity){
        this.activity = activity;
    }
    public static int i = 0;
    public void run()
    {
        TextView text = findViewById(R.id.textView2);
        text.setText("Второй текст" + ++i);
    }
}  
Answer 1

Самый простой вариант - во время создания Helper отдавать ему вашу активити или сразу TextView. Не забывайте учитывать что при пересоздании активити(например, поворот экрана) и активити, и textView надо указывать новые

public class MainActivity extends AppCompatActivity {        
    public TextView t, textView2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t = findViewById(R.id.textView);
        t.setText("Текст");
        textView2 = findViewById(R.id.textView2);
    }         
}
class Helper
{
    private MainActivity activity;
    public Helper(MainActivity activity){
        this.activity = activity;
    }
    public void run()
    {
        TextView text = activity.textView2;
        text.setText("Второй текст");
    }
}
Answer 2

Может быть так ?

class Helper {
    public void run() {
    MainActivity.text.setText("Второй текст");
    }
}

Но возможно придётся добавить видимость для "text".

READ ALSO
Проблемы с запуском процедуры из JDBC

Проблемы с запуском процедуры из JDBC

Есть такая процедура, она работает из консоли, когда я ввожу call products_count(null) - она работает

490
Broadcaster Receiver не работает

Broadcaster Receiver не работает

У меня есть два слушателя BroadcastReceiverSms и BroadcastReceiverCall которые отслеживают когда на телефон ЗВОНЯТ и приходит СМС и выводят оповещение с вибрациейКогда...

282
Как превратить String[][] в Map<String, Map<Integer, List<String[]>>>

Как превратить String[][] в Map<String, Map<Integer, List<String[]>>>

интересует красивый способ преобразования двумерного массива строк в мапу, значениями которой будет мапа, значениями которой будет список...

166
Почему здесь прибавляют 1?

Почему здесь прибавляют 1?

Добрый день не могу разобраться с кодом почему к переменной in добавляют 1

89