Пользовательский диалог кнопки виджета Android - PullRequest
2 голосов
/ 16 июня 2011

Можно ли открыть пользовательский диалог с помощью кнопки виджета?Я создал виджет с кнопкой.С этим учебным пособием, если я нажму ButtonP1, появится сообщение с тостом.Но я хочу, чтобы появился пользовательский диалог.В уроке также есть пример намерения для кнопки, но для моего настраиваемого диалогового окна она не работает, однако, если я хочу открыть действие, с которым она работает нормально.Я хочу, чтобы пользовательское диалоговое окно отображалось, когда пользователь нажимает кнопку на виджете.

Вот этот код, в котором Main.class является действием:

public class HelloWidget extends AppWidgetProvider {

public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    context.startService(new Intent(context, UpdateService.class));

     RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain);
     Intent configIntent = new Intent(context, Main.class);
     configIntent.setAction(ACTION_WIDGET_CONFIGURE);
     PendingIntent configPendingIntent = PendingIntent.getActivity(context, 0, configIntent, 0);
     remoteViews.setOnClickPendingIntent(R.id.ButtonP1, configPendingIntent);
     appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
 }

Когда я изменяю Main.classдля CustomizeDialog.class ничего не происходит.

Файл CustomizeDialog.java выглядит следующим образом:

public class CustomizeDialog extends Dialog implements OnClickListener {
Activity mActivity;
public CustomizeDialog(Activity activity) {
        super(activity);
         mActivity = activity;
...
}
@Override
    public void onClick(View v) {

        if (v == okButton)
        {
            dismiss();
            }
        if (v == cancelButton)
        {
            dismiss();
        }
    }
}

Изменить 06.21.2011

Спасибо вам, ребята, я смог назвать мероприятие с framelayout, что почти то, что я хотел.Однако я хочу сделать это с помощью customdialog, но с кодом, который я использую, он не появляется, когда я нажимаю на кнопку виджета:

Intent configIntent = new Intent(context, CustomizeDialog.class);
     configIntent.setAction(ACTION_WIDGET_CONFIGURE);
     PendingIntent configPendingIntent = PendingIntent.getActivity(context, REQUEST_CODE_THREE, configIntent, 0);
     remoteViews.setOnClickPendingIntent(R.id.ButtonP3, configPendingIntent);

Если я изменяю CustomizeDialog.class на Main.class, который является действием, он работает нормально.

Пожалуйста, найдите структуру CustomDialog.class выше.

Ответы [ 2 ]

5 голосов
/ 19 июня 2011

Как Таннер уже указывал, вы должны использовать активность для этого.

В манифесте необходимо добавить несколько атрибутов в диалоговое действие.

android: launchMode = "singleInstance" - чтобы поместить действие (диалог) в корень новой задачи, без этого действие будет помещено поверх основной активности в вашем приложении.

android: excludeFromRecents = "true" - так что вы не сможете открыть диалог долгим нажатием клавиши home.

android: theme = "@ android: style / Theme.Dialog" - оформить его в виде диалога.

<activity android:name=".InputDialog" 
    android:launchMode="singleInstance"
    android:theme="@android:style/Theme.Dialog"
    android:excludeFromRecents="true">
</activity>

В диалоговом задании вы должны вызывать финиш () для этого действия после того, как пользователь нажал «ОК», «Отмена» или кнопку «Назад». Если вы этого не сделаете, будет закрыто только диалоговое окно, а действие останется видимым.

Я писал инструкции, когда столкнулся с той же проблемой, можно найти здесь, в моем блоге.

1 голос
/ 16 июня 2011

Один из способов сделать это - показать диалоговое окно в действии, которое открывается, нажав на ваш виджет. Если вы используете что-то вроде FrameLayout, вы можете запустить действие, которое, кажется, зависает над вашим главным экраном.

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