AppWidget将无法正常工作 [英] AppWidget won't work

查看:190
本文介绍了AppWidget将无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用一个配置活动来切换使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆