У меня есть два класса, один класс 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);
}
}
Самый простой вариант - во время создания 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("Второй текст");
}
}
Может быть так ?
class Helper {
public void run() {
MainActivity.text.setText("Второй текст");
}
}
Но возможно придётся добавить видимость для "text".
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости