我正在使用 Android Studio 创建一个 Android 启动器应用。
我正在尝试添加一项功能,允许用户选择已安装的小部件并将其放置在我的启动器上。类似于 Play 商店提供的大多数发射器。
我的代码目前在 appWidgetHost
和 appWidgetManager
上出现 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。
您可以简单地通过在两行前分别添加 AppWidgetManager
和 AppWidgetHost
来修复此错误。像这样:
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/