構成アクティビティを使用して、RemoteViewsを使用してxmlファイル内のさまざまなビューの表示を切り替えています。最初は、ウィジェットが設定される前に構成アクティビティが呼び出されるので、更新する必要がないので、次を使用しました。
package com.example.test.clock.one;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RemoteViews;
public class chooseract extends Activity
{
int mAppWidgetId;
RemoteViews rv;
AppWidgetManager appWidgetManager;
Context context;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void buttonhandler(View view)
{
rv = new RemoteViews(context.getPackageName(), R.layout.activity_main);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
}
switch(view.getId())
{
case R.id.button1:
{
rv.setViewVisibility(R.id.analogClock1, View.VISIBLE);
rv.setViewVisibility(R.id.analogClock2, View.INVISIBLE);
finish();
break;
}
case R.id.button2:
{
rv.setViewVisibility(R.id.analogClock1, View.INVISIBLE);
rv.setViewVisibility(R.id.analogClock2, View.VISIBLE);
finish();
break;
}
}
}
}
しかし、それは空白のウィジェットを設定するだけです(デフォルトの可視性はINVISIBLEです)そして私は可視性を切り替えた後にappwidgetを更新しようとしました
package com.example.test.clock.one;
import android.app.Activity;
import android.appwidget.AppWidgetManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.RemoteViews;
public class chooseract extends Activity
{
int mAppWidgetId;
RemoteViews rv;
AppWidgetManager appWidgetManager;
Context context;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void buttonhandler(View view)
{
rv = new RemoteViews(context.getPackageName(), R.layout.activity_main);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
}
switch(view.getId())
{
case R.id.button1:
{
rv.setViewVisibility(R.id.analogClock1, View.VISIBLE);
rv.setViewVisibility(R.id.analogClock2, View.INVISIBLE);
break;
}
case R.id.button2:
{
rv.setViewVisibility(R.id.analogClock1, View.INVISIBLE);
rv.setViewVisibility(R.id.analogClock2, View.VISIBLE);
break;
}
}
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
appWidgetManager.updateAppWidget(mAppWidgetId, rv);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
}
しかし、NullPointerExceptionでボタンに触れると、これは強制的に閉じます。何かアイデアはありますか?