无法获得快速设置图块的参考

时间:2018-08-31 08:44:41

标签: java android

我可以使用onClick()方法设置qs磁贴的状态,但我也想使用我的主活动中的开关来切换其状态。但是,我无法使用开关更改图块的状态,因为getQsTile在onClick()方法之外返回null。

public class AwesomeTileService extends TileService{

Tile tile;
public Activity activity;

public AwesomeTileService(Activity activity){
    this.activity=activity;
    Switch switch1 = (Switch)this.activity.findViewById(R.id.switch1);
    switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            tile=getQsTile(); //tile is null

            SwitchState(); //SwitchState does not work with onCheckedChanged
            Log.v("Switch State=", ""+isChecked);
        }

    });
}

public AwesomeTileService(){
    //zero arg constructor
}


@Override
public void onTileAdded() {
    tile=getQsTile();


    tile.setState(Tile.STATE_INACTIVE);
    tile.updateTile();
}

@Override
public void onClick() {

    tile=getQsTile(); //tile is not null
    SwitchState(); //SwitchState method works with onClick
}

public void SwitchState(){

    if(tile!=null){
        if (tile.getState() == Tile.STATE_INACTIVE) {
            tile.setState(Tile.STATE_ACTIVE);
        }
        else{
            tile.setState(Tile.STATE_INACTIVE);
        }
        tile.updateTile();

    }
}

}

我可以简单地从应用程序中删除该开关,但是我很好奇要知道问题出在哪里以及如何解决。

1 个答案:

答案 0 :(得分:0)

如果您想从另一个活动以编程方式更新磁贴,请使用 sharedPreferences 并存储布尔值并在磁贴服务类的 onStartListening 方法中编写代码来更新磁贴。 (每次向下滑动面板时都会调用 onStartListening)。