Я хочу, чтобы скрыть элемент / Представления программно в Android - PullRequest
0 голосов
/ 05 февраля 2019

Я получил ответ JSON, который имеет elementId и флаг для скрытия / показа этого элемента

Вызов функции с использованием этого (из ответа JSON)

 displayView(templateDefinationItem.getTemplateDefinationId(), templateDefinationItem.isActive());

Я создал одну функцию для скрытия представлений

 public void displayView(final int elementId, boolean isVisible) {
    try {
        View view = findViewById(elementId);
        if (isVisible) {
            view.setVisibility(View.VISIBLE);

        } else {
            view.setVisibility(View.GONE);

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

В приведенном выше коде я передал elementId и значение true / false для операции, где elementId of (EditTextId, TextView, LinearLayout, Buttons и т. Д.)

Ошибка

Я получил ошибку в этой строке View view = findViewById(elementId); Получение null.

Что я хочу

есть ли способ связать любой тип элемента?Или любой общий вид для того же самого?

в моем случае я использовал это View view = findViewById(elementId); для привязки, но я получил ноль.

Ответы [ 3 ]

0 голосов
/ 05 февраля 2019

Скорее, передавая идентификатор вида, вы должны передать вид в методе отображения, который более удобен.

Идентификаторы первых просмотров генерируются автоматически, так что если вещи, которые вы храните, идентификаторы некоторых Где и позже используются для получения просмотров, то это не правильно, потому что идентификаторы генерируются и они отличаются от устройства к устройству и могут меняться в любое время при закрытии приложенияи начните снова.

Вы можете сделать это с помощью getIdentifier()

try {
     String buttonID = elementId;//String name of id
     int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
     View view = findViewById(resID);
     if (isVisible) {
        view.setVisibility(View.VISIBLE);
     } else {
        view.setVisibility(View.GONE);
    } catch (Exception e) {
        e.printStackTrace();
    }

, как указано выше, мы передаем id представления с комбинацией значений i и j, а затем используем метод getIdentifier () для созданияПредставления объектов.

То, что приведено выше, является решением вашей проблемы.

0 голосов
/ 23 мая 2019

Я бы предложил использовать Kotlin вместо Java и дополнительно использовать core ktx library (это библиотека полезных расширений Kotlin для Android).С его помощью вы можете сделать что-то вроде этого:

view.isVisible = true устанавливает вид на View.VISIBLE, тогда как view.isVisible = false устанавливает его на View.GONE

Аналогично, у вас есть view.isInvisible, которыйпереключается между Invisible и Visible и view.isGone, который переключается между Gone и Visible.

Если вам нужна документация по этим методам, вы можете найти ее здесь .

Кроме того, если вы используете Kotlin вместо Java, вам не нужно делать findViewById(R.id.xxx), вы можете просто выполнить статический импорт любого View.

0 голосов
/ 05 февраля 2019

В методе создания:

View view = findViewById(R.id.your_view);

Затем в функции:

if(isVisible){
view.setVisibility(View.VISIBLE);
} else {
view.setVisibility(View.GONE);
}
...