узнать, существует ли идентификатор в макете, используемом RemoteViews / AppWidgets - PullRequest
0 голосов
/ 06 апреля 2019

Я хочу иметь гибкий Appwidget, который исследует, какие виды содержатся в связанном макете, а какие нет. Обычно я бы использовал findViewByID, чтобы увидеть, возвращает ли он какой-либо идентификатор, но это невозможно в appWidgets. Как я могу это сделать?

Я пробовал context.getResources (). GetIdentifier (name, "id", context.getPackageName ()), но это всегда будет возвращать действительный идентификатор, поскольку идентификатор определяется другим файлом макета. Мне нужно выяснить, содержит ли мой текущий макет идентификатор.

public class MyWidget extends AppWidgetProvider {
    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {                  
        String idName="idName";
        String layoutName="layoutName";

        RemoteViews views = new RemoteViews(context.getPackageName(), Tools.getLayoutResource(context,layoutName));
        boolean idExistsInLayout=context.getResources().getIdentifier(name, "id", context.getPackageName());
    }
}

1 Ответ

1 голос
/ 06 апреля 2019

Как я могу это сделать?

AFAIK, ты не можешь. Для этого не существует API, и AFAIK экземпляр RemoteViews в вашем процессе даже не смотрит на ресурс макета. Он просто передает этот идентификатор вместе с другими вашими значениями в другой процесс рендеринга.

Ничто не мешает вашему собственному коду раздувать компоновку, а затем выполнять подобные проверки по сравнению с вашей надутой компоновкой вместо RemoteViews. Это похоже на муху с Buick; Я подозреваю, что есть более простые решения для любой проблемы, которую вы пытаетесь решить.

...