Щелчок на главном экране Виджет [дубликат]

Я знаю, что я на 3 года опоздал на этот вопрос, но мне захотелось вздрогнуть.

Хотя решение Gumbo отлично работает, оно не обрабатывает несколько случаев где исключение не возникает для JSON.parse({something that isn't JSON})

Я также предпочитаю возвращать разобранный JSON одновременно, поэтому вызывающему коду не нужно вызывать JSON.parse(jsonString) второй раз.

Это, похоже, хорошо работает для моих нужд:

function tryParseJSON (jsonString){
    try {
        var o = JSON.parse(jsonString);

        // Handle non-exception-throwing cases:
        // Neither JSON.parse(false) or JSON.parse(1234) throw errors, hence the type-checking,
        // but... JSON.parse(null) returns null, and typeof null === "object", 
        // so we must check for that, too. Thankfully, null is falsey, so this suffices:
        if (o && typeof o === "object") {
            return o;
        }
    }
    catch (e) { }

    return false;
};
14
задан SweSnow 13 January 2013 в 01:49
поделиться

2 ответа

Посмотрите здесь и прокрутите до подзаголовка. Добавление поведения к отдельным элементам.

Вам нужно убедиться, что вы вызываете оба setPendingIntentTemplate() из вашего AppWidgetProvider и setOnClickFillInIntent() из вашей реализации RemoteViewsService.RemoteViewsFactory.

Например:

public class Widget extends AppWidgetProvider {

    // ...

    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        for(int i = 0; i < appWidgetIds.length; i++){

            RemoteViews widget = new RemoteViews(context.getPackageName(), R.layout.widget);

            Intent startActivityIntent = new Intent(context, myActivity.class);
            PendingIntent startActivityPendingIntent = PendingIntent.getActivity(context, 0, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            widget.setPendingIntentTemplate(R.id.list_view, startActivityPendingIntent);

            appWidgetManager.updateAppWidget(appWidgetIds[i], widget);

            // ...
    }
}

public class WidgetAdapter implements RemoteViewsService.RemoteViewsFactory {

    // ...

    @Override
    public RemoteViews getViewAt(int position) {

    RemoteViews widgetRow = new RemoteViews(context.getPackageName(), R.layout.widget_row);

        Intent fillInIntent = new Intent();
        fillInIntent.putExtra(Widget.EXTRA_LIST_VIEW_ROW_NUMBER, position);
        widgetRow.setOnClickFillInIntent(R.id.list_view_row, fillInIntent);

        // ...

        return row;
    }
}

В примере StackWidget есть более убедительный пример, который находится в SDK , хотя мне было трудно найти (см. здесь для направлений). Он создает намерение показывать сообщение Toast, но использует тот же код.

36
ответ дан Community 19 August 2018 в 08:10
поделиться

Чтобы запустить любое действие, вы создаете намерение, а затем вызываете startActivity по этому намерению. Проверьте намерение и startActivity, и я уверен, что вы сможете сделать это сами.

-9
ответ дан Run2 19 August 2018 в 08:10
поделиться
  • 1
    Конечно, я знаю, как запустить свою деятельность обычным способом. Мне интересно, как вы это сделаете с помощью виджета ListView, поскольку обычный PendingIntent не будет работать. – SweSnow 13 January 2013 в 10:33
Другие вопросы по тегам:

Похожие вопросы: