通过单击整个小部件来启动活动在 Android Studio 中不起作用

Posted

技术标签:

【中文标题】通过单击整个小部件来启动活动在 Android Studio 中不起作用【英文标题】:Start activity by clicking on whole Widget is not working in Android Studio 【发布时间】:2021-04-23 04:11:03 【问题描述】:

我有一个创建的小部件并在单击 Intent 时为 FrameLayout 设置。实际上,我尝试了所有布局,如 LinearLayout、RelativeLayout 但没有成功。我很难弄清楚如何通过单击小部件上的任意位置来打开我的应用程序。

我还为 Framelayout 的每个子项使用了可点击的 false。但没有成功:(

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_
android:layout_
android:padding="4dp">

<FrameLayout
    android:id="@+id/wizFrameLayout"
    android:layout_
    android:layout_
    android:background="@android:color/transparent">

    <RelativeLayout
        android:id="@+id/wizLayout"
        android:layout_
        android:layout_
        android:background="@drawable/widget_shape"
        android:clickable="false"
        android:minWidth="110dp"
        android:minHeight="110dp">

        <ListView
            android:id="@+id/wiz_stack_view"
            android:layout_
            android:layout_
            android:layout_margin="0dp"
            android:clickable="false"
            android:divider="@null"
            android:dividerHeight="0dp"
            android:drawSelectorOnTop="false"
            android:listSelector="@android:color/transparent"
            android:padding="0dp" />

        <TextView
            android:id="@+id/wiz_empty_view"
            android:layout_
            android:layout_
            android:gravity="center"
            android:text="No Clock Added" />
    </RelativeLayout>
</FrameLayout>

这是我的小部件提供程序代码

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
    //Toast.makeText(context, "onUpdate", Toast.LENGTH_SHORT).show();
    for (int appWidgetId : appWidgetIds) 
        Intent serviceIntent = new Intent(context, DigitalWidgetService.class);
        serviceIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,appWidgetId);
        serviceIntent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.digital_clock_widget);

        Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
        views.setOnClickPendingIntent(R.id.wizFrameLayout,pendingIntent);

        views.setRemoteAdapter(R.id.wiz_stack_view,serviceIntent);
        views.setEmptyView(R.id.wiz_stack_view,R.id.wiz_empty_view);
        
        appWidgetManager.updateAppWidget(appWidgetId, views);

    

ListView 的小部件项代码

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_>
<TextClock
    android:id="@+id/wiz_textClock"
    android:layout_
    android:layout_
    android:layout_alignParentEnd="true"
    android:layout_alignParentRight="true"
    android:text="00:00 AM"
    android:textColor="@color/white"
    android:textSize="11dp" />
<TextView
    android:id="@+id/wiz_item_text"
    android:layout_
    android:layout_
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_toLeftOf="@+id/wiz_textClock"
    android:maxLines="1"
    android:text="item 1"
    android:textColor="@color/white"
    android:textSize="11dp" /></RelativeLayout>

为了更清楚,我附上了小部件的快照。请看一下。

【问题讨论】:

【参考方案1】:

我认为您需要在列表视图适配器类中单击列表视图上的项目

【讨论】:

能否请您举个例子,如何使项目和小部件空白区域都可点击? 你能看到我listview的适配器类吗?

以上是关于通过单击整个小部件来启动活动在 Android Studio 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android小部件,启动一个片段?

android 小部件开始一个新的活动

Android:将对象从集合小部件传递到活动

单击小部件后如何启动活动?

按下小部件ListView项目时Android开始活动

Android 通过单击不同的按钮从主页小部件打开 2 个不同的活动