我可以使用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();
}
}
}
我可以简单地从应用程序中删除该开关,但是我很好奇要知道问题出在哪里以及如何解决。
答案 0 :(得分:0)
如果您想从另一个活动以编程方式更新磁贴,请使用 sharedPreferences 并存储布尔值并在磁贴服务类的 onStartListening 方法中编写代码来更新磁贴。 (每次向下滑动面板时都会调用 onStartListening)。