У меня есть MainActivity, который содержит ImageView, TextView и 3 интерактивные кнопки.
После нажатия кнопки я хочу что-то изменить в SQlite dtb и в соответствии с этим загрузить разные данные, но снова показать их в том же действии.
public void ClickBtn(View v)
{
//insertData(String...
Intent intent = new Intent(MainActivity.this, MainActivity.class);
startActivity(intent);
}
Итак, как правило, в Main Activity.js я получаю данные из идентификатора, который был нажат ранее, и показываю эти данные. MainActivity следует использовать бесконечное количество раз для отображения разных данных.
Макет всегда будет одинаковым - ImageView, TextView и 3 интерактивные кнопки, только текст будет другим.
Вопрос в том, как я могу изменять содержимое только внутри одного и того же Activity?
Я не думаю, что Intent intent = new Intent(MainActivity.this, MainActivity.class);
из текущего действия может открыть такое же действие ...
я должен использовать invalidate () при нажатии кнопки? например ViewGroup vg = findViewById (R.id.mainLayout); vg.invalidate (); а затем вместо Intent используйте setContentView (R.layout.mainscreen); ?
вы можете использовать setText и т. д. для обновления View, хотя вы также можете изменить макет с помощью setcontentview
Вам действительно нужно изучить основы.
Когда вы работаете в Android, файлы макета XML являются просто схемами, которые в конечном итоге анализируются в созданный отражением экземпляр анонимного представления, который содержит в качестве дочерних элементов каждый из элементов макета XML с примененными к ним допустимыми параметрами тега XML. Следовательно, вы имеете дело не с макетами, а с объектами java / kotlin, которые могут быть:
Итак, если вы хотите изменить содержимое, первые шаги - сохранить ссылку на каждый объект: ImageView, TextView и Buttons и переместить код, отвечающий за их заполнение, в новый метод, чтобы вы могли вызывать его либо при загрузке действие (onCreate) или при нажатии кнопки. Таким образом, одно и то же действие может выполнять одно и то же действие снова и снова.
Наконец, постоянное воссоздание деятельности - УЖАСНАЯ идея. Для каждого объекта, который вы создаете (а действие ЯВЛЯЕТСЯ объектом, как и все остальное), вам нужна память X + Y, где X - это сумма всех членов класса объекта, а Y - сумма всех операций, необходимых для создание экземпляра, поэтому, постоянно воссоздавая активность, вы тратите ресурсы устройства, с дополнительной проблемой создания огромного набора идентичных действий.
Взгляните на java-книгу, затем на kotlin. Это облегчит тебе жизнь.
Я не хочу воссоздавать действие, я просто хочу изменить текст внутри этого действия, не воссоздавая его. Как и в HTML, я могу заменять бесконечное количество раз содержимое DIV без обновления страницы, так что это должно быть возможно и на android.
хорошо, я думаю, что это работает - в моем onclik я просто поместил эту строку txt = "testing"; Просмотр TextViewx = findViewById (R.id.texto); viewx.setText (txt); И текст изменяется без обновления активности
Да, viewx - это ссылка на textView, поэтому изменения, внесенные в ссылку, изменят фактический объект на экране. В объектно-ориентированных языках именно так вы что-то «обновляете». Не путайте Android XML с HTML, веб-интерфейс и платформы JVM очень разные.
Вот как я это решил. Просто замена текста без обновления активности. Сотни раз тестировал также с помощью мониторинга памяти и абсолютно не влиял на память устройства.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//get from dtb
int room = 1; int a1 = 2; int a2 = 3; int a3 =4;
TextView views = findViewById(R.id.text1);
views.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//get from dtb - img, text where room = a1;
TextView vv = findViewById(R.id.textof);
vv.setText("text from dtb");
}
});
TextView view2 = findViewById(R.id.text2);
view2.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//get from dtb - img, text where room = a2;
TextView vv = findViewById(R.id.textof);
vv.setText("another text from dtb");
}
});
}
получите новые данные и обновите свои представления