簡體   English   中英

AppWidgetHostView無法處理任何點擊事件?

[英]AppWidgetHostView can't handle any click events?

我正在創建一個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是我的LinearLayout。

因此,有人知道如何啟用事件嗎? 或者,如果還有另一種向我的啟動器添加應用程序小部件的方法?

謝謝。

我不確定代碼是否完整,但是您至少需要在活動中添加以下內容。

@Override
 protected void onStart() {

    super.onStart();

    Host.startListening();

}



@Override

protected void onStop() {

    super.onStop();

    Host.stopListening();

}

這有意義嗎?

您需要綁定小部件以使其具有交互性並允許其更新:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM