0

我在我的应用程序中创建了两个不同版本的小部件,它们仅在布局上有所不同,类/方法相同。但是,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>

MyWidgetProviderCopy制作相同的最有效方法是什么MyWidgetProvider,所以我只能为两者更新一个?我正在学习java,因为我对android有我的方式,所以可能有一些我不知道的聪明方式。我尝试像这样扩展课程

Public class MyWidgetProviderCopy extends MyWidgetProvider {
}

但它似乎不起作用,或者我做错了什么。感谢您的任何帮助或意见。

4

2 回答 2

0

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

Public class Example{ 

    private String exampleString;

    public String getExampleString(){
        return exampleString;
    }
}

然后,如果这个类被另一个类扩展,该子类将能够example使用该getExample方法访问私有字符串。

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

Public class Example2{
    private void exampleMethod(){}

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

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

于 2013-07-05T21:43:34.780 回答
0

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

于 2013-07-05T21:16:04.530 回答