Android - заменить только контент в той же деятельности - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть 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 я получаю данные из ID, по которому щелкнули ранее, и показываю эти данные. MainActivity следует использовать бесконечное количество раз для отображения различных данных.

Макет будет всегда одинаковым - ImageView, TextView и 3 нажимаемые кнопки, просто текст будет другим.

Вопрос в том, как я могу изменить содержимое только внутри одной и той же активности? Я не думаю, что Intent intent = new Intent(MainActivity.this, MainActivity.class); из текущей активности может открыть ту же активность ...

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

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

 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");
            }
        });
    }
0 голосов
/ 07 сентября 2018

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

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

  • Реферировано
  • Мутация
  • Заменены

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

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

Взгляните на книгу о явах, затем на книгу о котлине. Это сделает вашу жизнь проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...