java - 将已安装的小部件添加到 Android Activity

标签 java android widget android-appwidget buttonclick

我正在使用 Android Studio 创建一个 Android 启动器应用。

我正在尝试添加一项功能,允许用户选择已安装的小部件并将其放置在我的启动器上。类似于 Play 商店提供的大多数发射器。

我的代码目前在 appWidgetHostappWidgetManager 上出现 cannot resolve symbol 错误。

我已经在 SO 和谷歌上查看了如何实现这一点,但我仍然对如何让它工作以及如何更正我的代码感到困惑。

这是我的代码:

package com.example.widgettest;

import android.app.Activity;
import android.appwidget.AppWidgetHostView;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProviderInfo;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends Activity {

    Button widgetButton;
    // APPWIDGET_HOST_ID is any number you like
    appWidgetManager = AppWidgetManager.getInstance(this);
    appWidgetHost = new AppWidgetHost(this, 1);
    AppWidgetProviderInfo newAppWidgetProviderInfo = new AppWidgetProviderInfo();

    // Get an id
    int appWidgetId = appWidgetHost.allocateAppWidgetId();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
addwidgetButtonListener();

    }

   public void createwidget(){
       // Get the list of installed widgets
       List<AppWidgetProviderInfo> appWidgetInfos = new ArrayList<AppWidgetProviderInfo>();
       appWidgetInfos = appWidgetManager.getInstalledProviders();



// Create Widget
       AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);
       hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);

// Add it to your layout
       RelativeLayout rl = (RelativeLayout) findViewById(R.id.rl);
       rl.addView(hostView);
    }

    public void addwidgetButtonListener() {

        widgetButton = (Button) findViewById(R.id.button);
        widgetButton.setOnClickListener(new View.OnClickListener() {

            public void onClick(View view) {
createwidget();
            }
        });
    }
}

最佳答案

Cannot resolve symbol 的一个原因是您没有声明某个变量。在这种情况下,您似乎忘记了声明 appWidgetManager 和 appWidgetHost。

您可以简单地通过在两行前分别添加 AppWidgetManagerAppWidgetHost 来修复此错误。像这样:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
AppWidgetHost appWidgetHost = new AppWidgetHost(this, 1);

另一方面,我之前没有对 Widget Manager 或 Widget Host 做过任何工作,但一般来说,任何将 Activity 上下文作为参数的东西都应该在 onCreate 函数中初始化。因此,如果您发现在调试您的应用程序时这些变量没有正确初始化,您会想改为执行以下操作:

public class MainActivity extends Activity {
   ...
   AppWidgetManager appWidgetManager;
   AppWidgetHost appWidgetHost;
   ...

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       ...
       appWidgetManager = AppWidgetManager.getInstance(this);
       appWidgetHost = new AppWidgetHost(this, 1);
       ...
   }

关于java - 将已安装的小部件添加到 Android Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28947870/

相关文章:

opengl - OpenGL 的轻量级 UI 库

python - 如何在kivy的gridlayout中使一个小部件跨越多个列/行

python - 单击按钮时如何禁用文本抖动?

java - java中的定时器任务?

java - 将数据从 Activity 传递到带有底部导航栏的 fragment

java - 如何将值放入HashMap中?

java - 当用户未连接到互联网时写入 firebase 数据

android - 崩溃后重启 Android 应用程序

java - 查询firestore中的数组元素并将其放入Android Studio数组(CollectionReference)(whereArrayContains)

java - 在 Java 中初始化一个字符串