我正在开发 Android 小部件,我希望该小部件是单数的,这意味着如果用户将我的小部件添加到他的主屏幕,他应该无法再次将其添加到他的屏幕
user1289896
问问题
73 次
1 回答
1
您可以尝试使用一种解决方法来完成此操作:
1)在您的 AppWidgetProvider 中创建一个公共静态 Integer 变量来跟踪小部件 Id,最初将其设置为 null
2)为小部件创建一个配置活动(此处的说明https://developer.android.com/guide/topics/appwidgets/index.html#Configuring)
3) 在您的配置活动中,检查提供程序中变量的状态。如果已经创建了一个小部件(id 不等于 null),您可以使用 AlertDialog 向用户显示一条消息,然后将结果设置为取消。
您的代码可能如下所示:
在您的提供商中:
public class MyAppWidgetProvider extends AppWidgetProvider {
public static Integer widgetId;
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
//If the current widget has been deleted, set widget id to null again
for(int i = 0; i < appWidgetIds.length; i++){
if(widgetId == appWidgetIds[i]){
widgetId = null;
}
}
super.onDeleted(context, appWidgetIds);
}
}
在您的配置活动中
public class ConfigurationActivity extends Activity {
public int appWidgetId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
Bundle extras = intent.getExtras();
if (extras != null) {
appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
}
if(MyAppWidgetProvider.widgetId != null){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Widget already created");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_CANCELED, resultValue);
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
} else {
MyAppWidgetProvider.widgetId = appWidgetId;
Intent resultValue = new Intent();
resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
setResult(RESULT_OK, resultValue);
finish();
}
}
}
于 2015-05-15T16:36:47.820 回答