3

この質問については、インターネット全体で回答がありません。見つかりませんでした。私は一日中検索に費やしたので、誰も知らないと思い始めます

私はスタックオーバーフローが初めてで、英語は私の母国語ではありません。それでは、下手な英語で申し訳ありません。

わかりました、ここで質問です。2 つのボタンを持つ単純なウィジェットを作成します。そこのボタンの 1 つをクリックすると、config.activity が起動する場合があります。どうすればそれができますか?ここにあるように、インテントを試してみてください:

 Intent i = new Intent(context, ConfigActivity.class);
 i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(i);

しかし、インテント アクションを受け取ると、次の状況が表示されます。appWidgetId が無効であるため、config.activity はすぐに開始して終了します。

ウィジェットから構成アクティビティを起動する方法は?

4

2 に答える 2

1

Provider クラスから更新する場合は、次のように onUpdate() メソッドからウィジェット ID をフェッチします。

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

または、ConfigurationActivity からウィジェットを更新する場合は、次のように onCreate メソッドからウィジェット ID をフェッチします。

    Intent intent = getIntent();
    Bundle extras = intent.getExtras();
    if (extras != null) {
        mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    }

widget_layout のボタン/イメージビューからウィジェットを起動して ConfigurationActivity を作成します

    // Create intent pointing to ConfigurationActivity, in this example we are at ConfigurationActivity
    Intent configurationIntent = new Intent(WidgetBarConfiguration.this, WidgetBarConfiguration.class);
    // Create a extra giving the App Widget Id
    configurationIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    // Create a pending intent giving configurationIntent as parameter
    PendingIntent configurationPendingIntent = PendingIntent.getActivity(WidgetBarConfiguration.this, 0, configurationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    // Here we fecth the layout item and give it a action
    RemoteViews views = new RemoteViews(WidgetBarConfiguration.this.getPackageName(), R.layout.widget_bar_layout);
    // Setting onClick event that will lauch ConfigurationActivity
    views.setOnClickPendingIntent(R.id.imageViewSettings, configurationPendingIntent);
    // Updating widget
    mWidgetManager.updateAppWidget(mAppWidgetId, views);
    Intent resultValue = new Intent();
    resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
    setResult(RESULT_OK, resultValue);
    finish();

AndroidManifest.xml

<activity
            android:name=".WidgetBarConfiguration"
            android:label="@string/title_activity_widget_configuration"
            android:launchMode="singleInstance"
            android:theme="@style/AppTheme.NoActionBar" >
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" />
            </intent-filter>
        </activity>

lauchMode = "singleInstance"クリックすると ConfigurationActivity レイアウトのみが表示され、他のアクティビティ レイアウトがアタッチされていないことを確認してください。

于 2016-02-18T13:40:25.200 に答える
0

このコードを使用できます

        RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
        Intent launchActivity = new Intent(context, ConfigActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, launchActivity, 0);
        titles.setOnClickPendingIntent(R.id.Button, pendingIntent);
        ComponentName thisWidget = new ComponentName(context, Widget.class);
        AppWidgetManager manager = AppWidgetManager.getInstance(context);
        manager.updateAppWidget(thisWidget, rv);
于 2013-06-12T11:01:16.457 に答える