AppWidget将无法正常工作 [英] AppWidget won't work
问题描述
我使用一个配置活动来切换使用RemoteViews xml文件不同意见的可见性。起初我还以为,既然配置活动被称为设置小部件之前,我wouldnt需要更新,所以我用:
包com.example.test.clock.one; 进口android.app.Activity;
进口android.appwidget.AppWidgetManager;
进口android.content.Context;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.RemoteViews; 公共类chooseract扩展活动
{
INT mAppWidgetId;
RemoteViews RV;
AppWidgetManager appWidgetManager;
上下文语境;
公共无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
}
公共无效buttonhandler(查看视图)
{
RV =新RemoteViews(context.getPackageName(),R.layout.activity_main);
意向意图= getIntent();
捆绑额外= intent.getExtras();
如果(临时演员!= NULL)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
}
开关(view.getId())
{
案例R.id.button1:
{
rv.setViewVisibility(R.id.analogClock1,View.VISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.INVISIBLE); 完();
打破;
}
案例R.id.button2:
{
rv.setViewVisibility(R.id.analogClock1,View.INVISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.VISIBLE);
完();
打破; }
}
}
}
但只是设置一个空白的小部件(默认可见性是不可见的)
然后我尝试使用切换知名度之后更新appwidget
包com.example.test.clock.one;进口android.app.Activity;
进口android.appwidget.AppWidgetManager;
进口android.content.Context;
进口android.content.Intent;
进口android.os.Bundle;
进口android.view.View;
进口android.widget.RemoteViews;公共类chooseract扩展活动
{
INT mAppWidgetId;
RemoteViews RV;
AppWidgetManager appWidgetManager;
上下文语境;
公共无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
}
公共无效buttonhandler(查看视图)
{
RV =新RemoteViews(context.getPackageName(),R.layout.activity_main);
意向意图= getIntent();
捆绑额外= intent.getExtras();
如果(临时演员!= NULL)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
}
开关(view.getId())
{
案例R.id.button1:
{
rv.setViewVisibility(R.id.analogClock1,View.VISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.INVISIBLE);
打破; }
案例R.id.button2:
{
rv.setViewVisibility(R.id.analogClock1,View.INVISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.VISIBLE);
打破; }
} AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(上下文);
appWidgetManager.updateAppWidget(mAppWidgetId,RV);
意图resultValue =新的Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mAppWidgetId);
的setResult(RESULT_OK,resultValue);
完();
}
}
但是当我触摸按钮与一个NullPointerException异常这才力关闭
任何想法?
公共类MainActivity扩展活动实现OnClickListener {私人诠释mAppWidgetId;
私人RemoteViews RV;
私人AppWidgetManager appWidgetManager;@覆盖
公共无效的onCreate(捆绑savedInstanceState)
{
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_main); RV =新RemoteViews(this.getPackageName(),R.layout.activity_main);
按钮按钮1 =(按钮)findViewById(R.id.button1);
按钮按钮2 =(按钮)findViewById(R.id.button2); AnalogClock COS1 =(AnalogClock)findViewById(R.id.analogClock1);
AnalogClock cos2的=(AnalogClock)findViewById(R.id.analogClock2); button1.setOnClickListener(本);
button2.setOnClickListener(本);
}@覆盖
公共无效的onClick(查看视图){
意向意图= getIntent();
捆绑额外= intent.getExtras();
如果(临时演员!= NULL)
{
mAppWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID,AppWidgetManager.INVALID_APPWIDGET_ID);
}
开关(view.getId())
{
案例R.id.button1:
{
rv.setViewVisibility(R.id.analogClock1,View.VISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.INVISIBLE);
打破; }
案例R.id.button2:
{
rv.setViewVisibility(R.id.analogClock1,View.INVISIBLE);
rv.setViewVisibility(R.id.analogClock2,View.VISIBLE);
打破; }
} AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(本);
appWidgetManager.updateAppWidget(mAppWidgetId,RV);
意图resultValue =新的Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mAppWidgetId);
的setResult(RESULT_OK,resultValue);
完();
}
}
我添加一些修正,并不会引发错误。 :)
I'm using a configuration activity to toggle visibilty of different views in the xml file using RemoteViews. At first i thought, since the configuration activity is called before the widget is set, i wouldnt need to update, so i used :
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;
}
}
}
}
but that just sets a blank widget (default visibility is INVISIBLE) then i tried updating the appwidget after toggling visibility using
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();
}
}
but this just force closes when i touch the buttons with a NullPointerException Any ideas?
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();
}
}
I added few fixes and does not throw an error. :)
这篇关于AppWidget将无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!