Как добавить несколько виджетов в одно приложение?

Я разработал виджет с определенной функциональностью, но некоторые люди просили меня создать похожий виджет, но с немного другой функциональностью. Оба виджета будут выглядеть одинаково, но вести себя немного по-разному. Я попытался добавить другой приемник для второго виджета в свой файл манифеста. Я также создал отдельный xml-файл поставщика виджетов, и у меня есть отдельный класс, который реализует AppWidgetProvider с различными функциями. Тем не менее, когда я добавляю второй виджет на домашнюю страницу, кажется, что он использует функциональность первого виджета, а не новую функциональность.

Вот часть кода:

Мне нужно разделить классы, расширяющие AppWidgetProvider (по одному для каждого виджета). Имена классов: iContacts и iContactsQuickDial.

Разница между этими двумя классами заключается в методе OnReceive, который реализует другую логику. Остальные методы точно такие же.

Приемники манифеста:

    <receiver android:name=".iContacts" android:label="@string/app_name">
       <intent-filter>
              <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
              <action android:name="android.appwidget.action.CONFIGURATION_CHANGED" />
              <action android:name="com.mesa.icontacts.ConfigureContacsActivity.ACTION_UPDATE_WIDGET" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_1" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_2" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_3" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_4" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                 android:resource="@xml/icontacts_widget_provider" />
        </receiver>

        <receiver android:name=".iContactsQuickDial"
                  android:label="@string/app_name_quick_dial">
            <intent-filter>
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
                <action android:name="android.appwidget.action.CONFIGURATION_CHANGED" />
                <action android:name="com.mesa.icontacts.ConfigureContacsActivity.ACTION_UPDATE_WIDGET" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_1" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_2" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_3" />
                <action android:name="com.mesa.icontacts.iContacts.ACTION_WIDGET_SHOW_CONTACT_4" />
            </intent-filter>
            <meta-data android:name="android.appwidget.provider"
                 android:resource="@xml/icontacts_quick_dial_widget_provider" />
        </receiver>

Оба виджета используют одно и то же действие по настройке, поскольку эта логика не меняется.

Оба провайдера: icontacts_widget_provider:

<?xml version="1.0" encoding="UTF-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="300dip"
   android:minHeight="75dip"
   android:initialLayout="@layout/main"
/>

icontacts_quick_dial_widget_provider

<?xml version="1.0" encoding="UTF-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
   android:minWidth="300dip"
   android:minHeight="75dip"
   android:initialLayout="@layout/main"
/>

Обратите внимание, что макет одинаков для обоих, поскольку оба виджета должны выглядеть одинаково.

Любые идеи были бы хорошы?

Спасибо


person alejom99    schedule 20.08.2010    source источник
comment
Тем не менее, когда я добавляю второй виджет на домашнюю страницу, кажется, что он использует функциональность первого виджета, а не новую функциональность. - как вы это определяете?   -  person CommonsWare    schedule 21.08.2010
comment
Когда я добавляю оба виджета на домашнюю страницу, они оба выполняют одну и ту же логику, что неверно. Первый должен отображать контактную информацию, а второй виджет должен автоматически вызывать контакт. Тем не менее, оба виджета отображают контактную информацию, тем самым выполняя ту же логику.   -  person alejom99    schedule 21.08.2010
comment
возможный дубликат: stackoverflow.com/questions/2570004/   -  person Mathias Conradt    schedule 14.12.2010