AppWidgetHostView无法正确处理onClick/onLongClick

hun*_*175 5 android android-appwidget

我正在开发的启动,我现在用的应用小部件的工作,我跟着从这里教程: AppWigetHost tutrial -莱昂纳多菲舍尔 一切顺利,直到我试图在AppWidgetHostView加入onLongCick监听器

private void createAppWidget(Intent data) {
    Bundle extras = data.getExtras();
    final int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);
    AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
    AppWidgetHostView hostView = mAppWidgetHost.createView(getApplicationContext(), appWidgetId, appWidgetInfo);
    hostView.setAppWidget(appWidgetId, appWidgetInfo);
    LinearLayout.LayoutParams params = createLayoutParams(appWidgetInfo); 
    rootLayout.addView(hostView, params);
    hostView.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(getApplicationContext(), "Long click " + appWidgetId, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

当我在主机上添加一个小部件(默认的谷歌模拟时钟) - 并试图长时间点击它,它只是不起作用!长按后,它只会打开时钟应用程序(单击的默认操作).

谁能告诉我如何解决它?这是我的完整代码:http: //pastebin.com/61TkuLvx

添加 我刚刚再次检查:
----如果我长时间点击Clock小部件的边界,则会触发longClick事件!
----我添加了我的自定义appwidget(没有onclick处理程序):所以longclick事件总是被正确触发.
所以我想,它必须与touchevent处理程序/调度程序有关.

添加 我刚刚尝试在主机视图的所有子项上设置onLongClick,如下所示:

private void createAppWidget(Intent data) {
...
... 
    setChildrenViewLongClick(hostView, new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast.makeText(getApplicationContext(), "Long click " + appWidgetId, Toast.LENGTH_LONG).show();
            return true;
        }
    });
}

protected void setChildrenViewLongClick(View view, OnLongClickListener listener) {
    view.setOnLongClickListener(listener);
    String name = view.getClass().getName();
    Logger.logInfo("Classname: " + name);
    if ( view instanceof ViewGroup ) {
        ViewGroup vg = (ViewGroup) view;
        for(int i = 0 ; i < vg.getChildCount() ; i++ ) {
            setViewLongClick(vg.getChildAt(i), listener);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它只是不工作:(

奇怪的是:我做了另一个实验上的另一项活动,其中有一个的LinearLayout LL(具有onLongClick处理器)包含2个按钮BT1,BT2 - (每个按钮都有的onClick处理程序),并应用该方法setChildrenViewLongClick(LL,onLongClickListener) - 然后长按bt2 - Woop,它工作,调用onLongClickListener里面的动作!
那么问题是什么?AppWidgetHostView或事件/处理程序调度程序?或者我(我的代码)

我很困惑,请帮帮我!

TKS

hun*_*175 3

几天后没有得到任何答复,我尝试阅读 Trebuchet-launcher 的源代码事实证明非常简单:扩展 AppWidgetHostView 并重写 onInterceptTouchEvent() 方法,就像这个源代码一样- 我还没有尝试过,但是我想它会起作用的:)。

希望这对像我这样的人有帮助:)