Java 在多个小部件上使用相同的AppWidgetAdapter/以智能方式复制类

Java 在多个小部件上使用相同的AppWidgetAdapter/以智能方式复制类,java,android,inheritance,widget,copy,Java,Android,Inheritance,Widget,Copy,我正在我的应用程序中创建一个小部件的两个不同版本,只是布局不同,类/方法相同。但是,android不接受两个具有相同的AppWidgetProvider名称的小部件。因此,我必须让他们与众不同: <receiver android:icon="@drawable/ic_launcher" android:label="@string/widget_name_vert" android:name

我正在我的应用程序中创建一个小部件的两个不同版本,只是布局不同,类/方法相同。但是,android不接受两个具有相同的
AppWidgetProvider
名称的小部件。因此,我必须让他们与众不同:

 <receiver
                android:icon="@drawable/ic_launcher"
                android:label="@string/widget_name_vert"
                android:name="MyWidgetProvider" >
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/widget_info_vert" />
        </receiver>

        <receiver
                android:icon="@drawable/ic_launcher"
                android:label="@string/widget_name_horz"
                android:name="MyWidgetProviderCopy" >
            <intent-filter >
                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            </intent-filter>

            <meta-data
                    android:name="android.appwidget.provider"
                    android:resource="@xml/widget_info_horz" />
        </receiver>
但它似乎不起作用,或者我做错了什么。
感谢您的帮助或输入。

您可以创建一个扩展了
AppWidgetProvider
的基类,然后拥有从该基类扩展的类(每个版本的AppWidget都有一个)。

在Java中扩展类时,子类将继承所有公共和受保护的方法和字段。但是,它不会继承任何私有方法或字段。让子类访问这些字段的唯一方法是在基类中创建允许您访问这些私有字段的公共方法

Public class Example{ 

    private String exampleString;

    public String getExampleString(){
        return exampleString;
    }
}
然后,如果该类被另一个类扩展,则该子类将能够使用
getExample
方法访问私有字符串
example

此外,要访问任何私有方法,您可以创建一个只调用您想要使用的方法的公共包装器方法

Public class Example2{
    private void exampleMethod(){}

    public void exampleMethodWrapper(){
        exampleMethod();
    }
}

因此,您可以执行列出的操作,但您可能需要更改基类,以便子类可以正确访问所有字段和方法。

您是否也可以创建受保护的包装方法,以便一般公众无法访问包装,但子类可以?是,protected还可以用于允许子类同时使用字段和方法,而不允许一般公众访问它们。
Public class Example2{
    private void exampleMethod(){}

    public void exampleMethodWrapper(){
        exampleMethod();
    }
}