AppWidget не будет работать
Я использую действия по настройке, чтобы переключать видимость различных представлений в файле XML с помощью RemoteViews. Сначала я подумал, что так как конфигурация вызывается до того, как виджет установлен, мне не нужно обновляться, поэтому я использовал:
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;
}
}
}
}
но это просто устанавливает пустой виджет (видимость по умолчанию невидима), затем я попытался обновить 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. Есть идеи?
1 ответ
Решение
public class MainActivity extends Activity implements OnClickListener{
private int mAppWidgetId;
private RemoteViews rv;
private AppWidgetManager appWidgetManager;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rv = new RemoteViews(this.getPackageName(), R.layout.activity_main);
Button button1 = (Button)findViewById(R.id.button1);
Button button2 = (Button)findViewById(R.id.button2);
AnalogClock cos1 = (AnalogClock)findViewById(R.id.analogClock1);
AnalogClock cos2 = (AnalogClock)findViewById(R.id.analogClock2);
button1.setOnClickListener(this);
button2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
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(this);
appWidgetManager.updateAppWidget(mAppWidgetId, rv);
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
}
Я добавил несколько исправлений и не выдает ошибку.:)