1

これまでのところ、私は持っています:

public class Info extends Activity {

    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    public Info() {
        super();
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setResult(RESULT_CANCELED);

        setContentView(R.layout.widget_activity_info);

        findViewById(R.id.save_button).setOnClickListener(mOnClickListener);

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

    View.OnClickListener mOnClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            final Context context = Info.this;

            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);


            RemoteViews views = new RemoteViews(context.getPackageName(),
                    R.layout.widget_activity);
                    appWidgetManager.updateAppWidget(mAppWidgetId, views);

            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
            setResult(RESULT_OK, resultValue);
            finish();
        }
    };

}

これに基づいて、保存ボタンをデフォルトの画像にして、android:dial="@drawable/widgetdial" を android:dial="@drawable/widgetdial2" に変更する別のボタンを作成したいと思います。これを行う方法はありますか?

4

1 に答える 1

0

OK、私の理解が正しければ、ウィジェット構成アクティビティに 2 つのボタンが必要です ( Info)。1 つのボタンで、ウィジェット自体のイメージを切り替えます ( と の間R.drawable.widgetdial) R.drawable.widgetdial2。もう 1 つのボタンは、選択を保存してInfoアクティビティを終了します。正しい?

もちろん、アクティビティのレイアウトにボタンを追加する必要がありますInfoR.id.change_button例として以下にこれを参照しました。

私はこれをテストしましたが、動作します。コードにいくつかのコードを追加し、新しいコード部分にコメントを付けました。

public class Info extends Activity {

    //next three lines is new code
    private int drawableSrc;
    private TextView statusText;
    private Button changeButton;

    int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
    public Info() {
        super();
    }

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);

        setResult(RESULT_CANCELED);

        setContentView(R.layout.widget_activity_info);

        findViewById(R.id.save_button).setOnClickListener(mOnClickListener);

        //next six lines is new code
        statusText = (TextView)findViewById(R.id.text);
        statusText.setText("Now showing widgetdial image");
        changeButton = (Button)findViewById(R.id.change_button);
        changeButton.setText("Change to widgetdial2 image");
        drawableSrc = R.drawable.widgetdial;
        changeButton.setOnClickListener(changeOnClickListener);

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

    View.OnClickListener mOnClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            final Context context = Info.this;

            AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);

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

            //next line is new code, needs to come before updateWidgetApp
            views.setImageViewResource(R.id.viewid, drawableSrc);

            appWidgetManager.updateAppWidget(mAppWidgetId, views);

            Intent resultValue = new Intent();
            resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
            setResult(RESULT_OK, resultValue);
            finish();
        }
    };

    //everything below this is new code
    View.OnClickListener changeOnClickListener = new View.OnClickListener() {
        public void onClick(View v) {
            if(drawableSrc == R.drawable.widgetdial) {
                drawableSrc = R.drawable.widgetdial2;
                statusText.setText("Now showing widgetdial2 image");
                changeButton.setText("Change to widgetdial image");
            }
            else {
                drawableSrc = R.drawable.widgetdial;
                statusText.setText("Now showing widgetdial image");
                changeButton.setText("Change to widgetdial2 image");
            }
        }
    };
}

変更したいものを として参照しましたR.id.viewidが、これはもちろん ID 参照の例にすぎません。

正確に何を変更したいか (ウィジェットの背景またはウィジェットのイメージビュー?) に応じて、ここで確認できます:その他の SO の質問

アクティビティに使用したレイアウトの例Info( として参照したファイルR.id.widget_activity_info) は次のとおりです。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true" />
    <Button
        android:id="@+id/change_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/text" />
    <Button
        android:id="@+id/save_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Save"
        android:layout_below="@id/change_button" />
</RelativeLayout>

それでもうまくいかない場合は、私がアップロードした私の例をチェックしてください。zip ファイルには、Eclipse にインポートできるワークスペースが含まれています。これをエミュレーターで実行できます。

これがお役に立てば幸いです。

于 2012-10-19T07:07:49.393 に答える