Chr*_*ght 5 android viewflipper android-appwidget
我正在玩构建一个新的小部件并且正在查看Android应用程序小部件文档,特别是关于支持哪些小部件类的部分.我注意到ViewFlipper受支持,但我很难找到如何在主屏幕小部件中使用它的任何示例.特别是,我想知道是否可以手动触发交换视图.在一个活动中,这看起来相对简单,一个例子是挂钩按钮的onclick监听器来调用鳍状肢的showNext().
该RemoteViews对象有showNext和showPrevious方法,但我不知道我理解如何挂钩起来,从用户与小部件交互触发的事件.任何人都可以提供何时可以调用这些方法的示例?
看起来小部件中的按钮只能连接到意图而不是代码来练习鳍状肢.如果这个限制为真,那么在app小部件中唯一使用视图翻转器来自动翻转视图吗?
假设您有2个按钮:LEFT和RIGHT.首先,你要将未决意图附加到每个(这里是由Service#onStart以下方式触发:
@Override
public void onStart(Intent intent, int startId) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this.getApplicationContext());
int[] allWidgetIds = intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS);
// add listeners for every widget registered
for (int widgetId : allWidgetIds) {
addClickListeners(appWidgetManager, widgetId, root);
}
stopSelf();
}
protected void addClickListeners(AppWidgetManager appWidgetManager, int widgetId, RemoteViews root) {
root.setOnClickPendingIntent(R.id.left, getNavigationIntent(widgetId, R.id.left));
root.setOnClickPendingIntent(R.id.right, getNavigationIntent(widgetId, R.id.right));
}
protected PendingIntent getNavigationIntent(int widgetId, final int id) {
Intent clickIntent = new Intent(this, WidgetProvider.class);
clickIntent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
clickIntent.putExtra(TRIGGER, id);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
return pendingIntent;
}
Run Code Online (Sandbox Code Playgroud)
然后,在AppWidgetProvider做
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Bundle extras = intent.getExtras();
Integer id = (Integer) (extras == null ? null : extras.get(TRIGGER));
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action) && id != null) {
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
onNavigate(context, widgetId, id);
} else {
super.onReceive(context, intent);
}
}
protected void onNavigate(Context context, Integer widgetId, Integer id) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
RemoteViews root = new RemoteViews(context.getPackageName(), R.layout.app_widget);
if (id == R.id.left) {
root.showPrevious(R.id.scroll);
} else {
root.showNext(R.id.scroll);
}
appWidgetManager.updateAppWidget(widgetId, root);
}
Run Code Online (Sandbox Code Playgroud)
这应该做到这一点.现在的问题是 - 这只适用于API 11+,而我发现了root.setInt(R.id.scroll, "setDisplayedChild", pos)在API 7中无法解决的困难方法.
| 归档时间: |
|
| 查看次数: |
8453 次 |
| 最近记录: |