【问题标题】:Call a method from MainActivity when a widget button is clicked单击小部件按钮时从 MainActivity 调用方法
【发布时间】:2015-07-27 08:06:29
【问题描述】:

我想通过单击我的AppWidgetProvider 中的小部件按钮从我的MainActivity 调用特定方法。我已经设置了只有一个按钮的布局,并且已经创建了widget.xml。我的问题是当我单击要从 My MainActivity 调用方法的按钮时没有任何反应。

这是我的 AppWidgetProvider 类

public class NewAppWidget extends AppWidgetProvider {

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {

        final int N = appWidgetIds.length;
        for (int i = 0; i < N; i++) {
            updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
        }
    }

    @Override
    public void onEnabled(Context context) {

    }

    @Override
    public void onDisabled(Context context) {

    }

    static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                                int appWidgetId) {
        CharSequence widgetText = context.getString(R.string.appwidget_text_balance);

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

        appWidgetManager.updateAppWidget(appWidgetId, views);

    }

    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
    }
}

这是我的 MainActivity.class

public class MainActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
     public void makeText(String message){
        Toast.makeText(this,message,Toast.LENGHT_SHORT).show();

     }
     public void calculateData(){

       //Something in here
     }
  }

这是我的 AndroidManifest.xml

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<!--declare new widget-->
<receiver android:name=".NewAppWidget" >
    <intent-filter>
        <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
    </intent-filter>

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

【问题讨论】:

  • 为什么不在不同的类中声明 calculateData() 并且这个函数需要一些参数来进行计算,你可以在任何地方调用这个新类,在 MainActivity 或你的小部件类中,但你仍然可以尝试 MainActivity obj=new MainActivity();并像这样调用你的函数 obj.calculateData();

标签: java android methods widget


【解决方案1】:

基本上你要求的是在 2 个类之间共享一个方法,对吗?

有很多方法可以做到这一点,就像共享任何其他数据一样。

使用可以全局访问的类:

即-

public class GlobalMethods{

    public static void calculateData(){
        ....
    }

}

并从您的其他类文件中访问它:

GlobalMethods.calculateData(...);

我猜你想在你的 mainActivity 中调用calculateData(),因为你想编辑的那个类中可能有数据。

如果是这种情况,也许您应该考虑使用接口或单例在活动/类之间共享数据。

查看一些示例 here 了解这是如何完成的。

并非所有示例都适用于您的情况,但您应该从中获得一些想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    相关资源
    最近更新 更多