【问题标题】:AppWidgetHostView can't handle any click events?AppWidgetHostView 不能处理任何点击事件?
【发布时间】:2017-12-24 23:19:40
【问题描述】:

我正在创建一个 android 启动器并希望实现 appWidgets。为了测试,我使用com.android.quicksearchbox 小部件并将其添加到屏幕顶部。 问题是,我正在使用 AppWidgetHostView,它似乎没有注意到用户所做的任何点击或触摸事件。谁能告诉我为什么?这是我所有的 appWidgets 代码(在 onCreate(Bundle) 函数中):

    android.appwidget.AppWidgetManager appWidgetManager = android.appwidget.AppWidgetManager.getInstance(this);
    android.appwidget.AppWidgetHost appWidgetHost = new android.appwidget.AppWidgetHost(this, 0);
    android.appwidget.AppWidgetProviderInfo newAppWidgetProviderInfo = new android.appwidget.AppWidgetProviderInfo();


    int appWidgetId = appWidgetHost.allocateAppWidgetId();


    List<android.appwidget.AppWidgetProviderInfo> appWidgetInfos = new ArrayList<android.appwidget.AppWidgetProviderInfo>();
    appWidgetInfos = appWidgetManager.getInstalledProviders();

    for(int j = 0; j < appWidgetInfos.size(); j++)
    {
        if (appWidgetInfos.get(j).provider.getPackageName().equals("com.android.quicksearchbox"))
        {

            newAppWidgetProviderInfo = appWidgetInfos.get(j);
            break;
        }
     }



    android.appwidget.AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);
    hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);


    android.widget.LinearLayout ll = (android.widget.LinearLayout) findViewById(R.id.loll);
    ll.addView(hostView, 0);

loll 是我的线性布局。

所以有人知道我该如何启用事件吗?或者是否有其他方法可以将应用小部件添加到我的启动器?

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    我不确定代码是否完整,但您至少需要在活动中添加以下内容。

    @Override
     protected void onStart() {
    
        super.onStart();
    
        Host.startListening();
    
    }
    
    
    
    @Override
    
    protected void onStop() {
    
        super.onStop();
    
        Host.stopListening();
    
    }
    

    这有意义吗?

    【讨论】:

    • 我尝试了您的解决方案似乎有效,但是对于我必须在 http 或消息或 gmail 附近查看数据的复杂小部件的问题,数据看不到它们
    【解决方案2】:

    您需要绑定小部件以使其具有交互性并允许其更新:

    boolean allowed = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, newAppWidgetProviderInfo.provider);
    
    if (!allowed) {
        // Request permission
        Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, newAppWidgetProviderInfo.provider);
        final int REQUEST_BIND_WIDGET = 1987;
        myActivity.startActivityForResult(intent, REQUEST_BIND_WIDGET);
    }
    

    此外,正如@Sergey 的回复中提到的,您需要在您的活动或片段中添加以下内容:

    @Override
     protected void onStart() {
        super.onStart();
        appWidgetHost.startListening();
    }
    
    @Override
    protected void onStop() {
        super.onStop();
        appWidgetHost.stopListening();
    }
    

    【讨论】:

    • 我尝试了您的解决方案似乎可行,但问题是对于复杂的小部件,我必须在 http 或消息或 gmail 附近查看数据,但数据看不到它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多