【问题标题】:Adding installed widgets to Android activity将已安装的小部件添加到 Android 活动
【发布时间】:2015-05-10 22:55:45
【问题描述】:

我正在使用 Android Studio 创建一个 Android Launcher 应用。

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

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

我在 SO 和 Google 上查看了如何实现这一点,但我仍然对如何使其工作以及如何更正我的代码感到困惑。

这是我的代码:

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();
            }
        });
    }
}

【问题讨论】:

    标签: java android widget android-appwidget buttonclick


    【解决方案1】:

    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);
           ...
       }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多