Android-виджет требует возврата дважды - PullRequest
2 голосов
/ 16 июня 2011

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

Виджет также находится в отдельном пакете, если это имеет значение

Манифест

<receiver android:name="com.gflam.widget.WidgetProvider" >
        <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>
    <meta-data android:name="android.appwidget.provider"
           android:resource="@xml/widget" />
    </receiver>
<activity android:name="com.gflam.widget.Dialog" android:launchMode="singleInstance" android:noHistory="true" ></activity>

WidgetProvider

public class WidgetProvider extends AppWidgetProvider {

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            Intent intent = new Intent(context, com.gflam.widget.Dialog.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
            views.setOnClickPendingIntent(R.id.widget, pendingIntent);

            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }
}

Активность запущена

public class Dialog extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        SharedPreferences settings = getSharedPreferences(PREFS_DEVICE, 0);

        final CharSequence[] items = {"1", "2", "3", "4", "5"};
        AlertDialog.Builder builder = new AlertDialog.Builder(Dialog.this);
        builder.setTitle("What would you like to do?");
        builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
            }
            });
            builder.setPositiveButton("Okay", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    SparseBooleanArray CheCked =((AlertDialog)dialog).getListView().getCheckedItemPositions();
                    if(CheCked.get(0)){

                    }
                    if(CheCked.get(1)){

                    }
                    if(CheCked.get(2)){

                    }
                    if(CheCked.get(3)){

                    }
                    if(CheCked.get(4)){

                    }
                }
            }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.dismiss();
                }
        }).show();
    }
}

Ответы [ 2 ]

2 голосов
/ 15 декабря 2011
    Dialog dialog = new Dialog(this);
    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            YourActivity.this.finish();
        }
    });

Диалог переопределения onBackPressed ()?

0 голосов
/ 17 июня 2011

Понял, что это имеет большой смысл: первая спина убивает диалог, затем мне нужна вторая спина, чтобы убить действие, поэтому я думаю, что мне нужно переписать его, чтобы расширить диалог и что не жаль в вопросе, но выяснил, чтобыл неправ в конце концов

...