Android - заменить только контент в том же действии

У меня есть 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); из текущего действия может открыть такое же действие ...

получите новые данные и обновите свои представления

Pavneet_Singh 07.09.2018 19:19

я должен использовать invalidate () при нажатии кнопки? например ViewGroup vg = findViewById (R.id.mainLayout); vg.invalidate (); а затем вместо Intent используйте setContentView (R.layout.mainscreen); ?

Darksymphony 07.09.2018 19:26

вы можете использовать setText и т. д. для обновления View, хотя вы также можете изменить макет с помощью setcontentview

Pavneet_Singh 07.09.2018 19:48
0
3
580
2

Ответы 2

Вам действительно нужно изучить основы.

Когда вы работаете в Android, файлы макета XML являются просто схемами, которые в конечном итоге анализируются в созданный отражением экземпляр анонимного представления, который содержит в качестве дочерних элементов каждый из элементов макета XML с примененными к ним допустимыми параметрами тега XML. Следовательно, вы имеете дело не с макетами, а с объектами java / kotlin, которые могут быть:

  • Ссылка
  • Мутировавший
  • Заменены

Итак, если вы хотите изменить содержимое, первые шаги - сохранить ссылку на каждый объект: ImageView, TextView и Buttons и переместить код, отвечающий за их заполнение, в новый метод, чтобы вы могли вызывать его либо при загрузке действие (onCreate) или при нажатии кнопки. Таким образом, одно и то же действие может выполнять одно и то же действие снова и снова.

Наконец, постоянное воссоздание деятельности - УЖАСНАЯ идея. Для каждого объекта, который вы создаете (а действие ЯВЛЯЕТСЯ объектом, как и все остальное), вам нужна память X + Y, где X - это сумма всех членов класса объекта, а Y - сумма всех операций, необходимых для создание экземпляра, поэтому, постоянно воссоздавая активность, вы тратите ресурсы устройства, с дополнительной проблемой создания огромного набора идентичных действий.

Взгляните на java-книгу, затем на kotlin. Это облегчит тебе жизнь.

Я не хочу воссоздавать действие, я просто хочу изменить текст внутри этого действия, не воссоздавая его. Как и в HTML, я могу заменять бесконечное количество раз содержимое DIV без обновления страницы, так что это должно быть возможно и на android.

Darksymphony 08.09.2018 09:40

хорошо, я думаю, что это работает - в моем onclik я просто поместил эту строку txt = "testing"; Просмотр TextViewx = findViewById (R.id.texto); viewx.setText (txt); И текст изменяется без обновления активности

Darksymphony 08.09.2018 10:10

Да, viewx - это ссылка на textView, поэтому изменения, внесенные в ссылку, изменят фактический объект на экране. В объектно-ориентированных языках именно так вы что-то «обновляете». Не путайте Android XML с HTML, веб-интерфейс и платформы JVM очень разные.

Fco P. 09.09.2018 05:15

Вот как я это решил. Просто замена текста без обновления активности. Сотни раз тестировал также с помощью мониторинга памяти и абсолютно не влиял на память устройства.

 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");
            }
        });
    }

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