【问题标题】:How to call onUpdate method of widget on button click?如何在按钮单击时调用小部件的 onUpdate 方法?
【发布时间】:2018-02-28 11:35:56
【问题描述】:

所以基本上,我有一个简单的应用小部件,它显示文件中的值并每 24 小时更新一次。它可以正常工作,但是我想将刷新按钮添加到我的小部件中,并且每次单击该按钮时都想调用 onUpdate 。我一直在寻找一些答案,但它们似乎与我想要做的不匹配。

AppWidgetProvider

    public class NewAppWidget extends AppWidgetProvider {

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

        //Petlja za id-ove
        String prosek = citaIzFajla(context);
        final int N = appWidgetIds.length;
        for(int i=0; i<N; i++){
            int awID = appWidgetIds[i];
            RemoteViews v = new RemoteViews(context.getPackageName(), R.layout.new_app_widget);
            v.setTextViewText(R.id.widget_text, prosek);
            appWidgetManager.updateAppWidget(awID, v);

        }
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        super.onDeleted(context, appWidgetIds);
        Toast.makeText(context, "Deleted widget", Toast.LENGTH_LONG).show();
    }



    public void refreshButtonClick(View v){
    //I need code that goes here to call onUpdate()
    }



    public String readFromFile(Context c) {
        String out = "fail";
        String fileName = "PROSEK";
        try {
            FileInputStream fileIS = c.openFileInput(fileName);
            try {
                int size = fileIS.available();
                byte[] bufferReader = new byte[size];
                fileIS.read(bufferReader);
                fileIS.close();
                out = new String(bufferReader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return out;
    }
}

小部件的xml文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_margin="5dp"
    android:background="#cbcfd6">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:layout_margin="2dp"
        android:background="#000000">

        <Button
            android:id="@+id/widget_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Refresh"
            android:onClick="refreshButtonClick"/>

        <TextView
            android:id="@+id/widget_prosek"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:textColor="#ffffff"
            android:text="Prosek:"
            android:textSize="28dp"
            android:textAlignment="center"/>
        <TextView
            android:id="@+id/widget_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textColor="#ffffff"
            android:text="Example"
            android:textSize="28dp"
            android:gravity="right"
            />

    </LinearLayout>

</LinearLayout>

对不起,我的英语不好。

【问题讨论】:

  • 那么这里的问题是什么?
  • 我不知道应该在 refreshButtonClick() 方法中写什么,以便在单击按钮时调用 onUpdate()
  • @VukTodorovic 你是怎么做到的?

标签: java android android-appwidget appwidgetprovider onupdate


【解决方案1】:

要在按钮单击期间触发小部件上的onUpdate,您可以尝试以下操作:

Intent intent = new Intent(this, NewAppWidget.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);

int[] ids = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), NewAppWidget.class));

intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids);
sendBroadcast(intent);

【讨论】:

  • 这不是我所需要的,但它帮助我理解了这个想法并让它发挥作用。谢谢!
【解决方案2】:

在您的refreshButtonClick() 代码中,只需通过编写onUpdate(); 来调用onUpdate()

【讨论】:

  • 他们需要 appWidgetManager、appWidgetIds
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多