小部件中的文本未更改

芬利·史密斯

我目前正在开发一个小工具,该工具可以算到开学的时间。我已经对其进行了测试,并且一切都与一件事无关。小部件中的文本不会更改

这是我的代码(BGSWidgetProvider.java):

包com.bordengrammar.bordengrammarapp;

import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.widget.RemoteViews;

import com.bordengrammar.bordengrammarapp.utils.ut;

import java.util.Calendar;
import java.util.Timer;
import java.util.TimerTask;

public class BGSWidgetProvider extends AppWidgetProvider {

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

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new MyTime(context, appWidgetManager), 1, 1000);
    }

    private class MyTime extends TimerTask {
        RemoteViews remoteViews;
        AppWidgetManager appWidgetManager;
        ComponentName thisWidget;       

        public MyTime(Context context, AppWidgetManager appWidgetManager) {
            this.appWidgetManager = appWidgetManager;
            remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
            thisWidget = new ComponentName(context, BGSWidgetProvider.class);
        }

        @Override
        public void run() {
            remoteViews.setTextViewText(R.id.hours, hour());
            remoteViews.setTextViewText(R.id.minutes, minutes());
            ut.logIt(minutes());
            ut.logIt(hour());
            appWidgetManager.updateAppWidget(thisWidget, remoteViews);
        }




        public String hour() {
            /*
            * Work out whether tommorow is right day, (Right meaning mon-fri)
            * If it is work out the amount of hours and minutes until 8.30am tommorow
            * Else work out how many days, hours and minutes until monday 8.30am
            *
             */
            String result;
            Calendar now = Calendar.getInstance();
            int currentDay = now.get(Calendar.DAY_OF_WEEK);

            Calendar school = Calendar.getInstance();
            school.add(Calendar.DAY_OF_YEAR, 1);
            if (currentDay == Calendar.SATURDAY)
            {
                school.add(Calendar.DAY_OF_YEAR, 1);
            }
            else if (currentDay == Calendar.FRIDAY)
            {
                school.add(Calendar.DAY_OF_YEAR, 2);
            }

            school.set(Calendar.HOUR_OF_DAY, 8);
            school.set(Calendar.MINUTE, 30);
            long millisLeft = school.getTimeInMillis() - now.getTimeInMillis();
            long hoursLeft = millisLeft / (60 * 60 * 1000); 
            String hours = Long.toString(hoursLeft);        
            return hours;


        }
        public String minutes() {
            /*
            * Work out whether tommorow is right day, (Right meaning mon-fri)
            * If it is work out the amount of hours and minutes until 8.30am tommorow
            * Else work out how many days, hours and minutes until monday 8.30am
            *
             */         
            Calendar now = Calendar.getInstance();
            int currentDay = now.get(Calendar.DAY_OF_WEEK);

            Calendar school = Calendar.getInstance();
            school.add(Calendar.DAY_OF_YEAR, 1);
            if (currentDay == Calendar.SATURDAY)
            {
                school.add(Calendar.DAY_OF_YEAR, 1);
            }
            else if (currentDay == Calendar.FRIDAY)
            {
                school.add(Calendar.DAY_OF_YEAR, 2);
            }

            school.set(Calendar.HOUR_OF_DAY, 8);
            school.set(Calendar.MINUTE, 30);

            long millisLeft = school.getTimeInMillis() - now.getTimeInMillis();         
            long minutesLeft =  (millisLeft % (60 * 60 * 1000)) / (60 * 1000);          
            String minutes = Long.toString(minutesLeft);


            return minutes;


        }



    }

我的布局(widget_layout.xml):

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout"
              android:orientation="horizontal"
              android:layout_width="250dp"
              android:layout_height="72dp"
              android:background="@color/bordenpurple">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10"
        android:textSize="60dp"
        android:paddingTop="5dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:textColor="@color/bordenyellow"
        android:typeface="sans"
        android:id="@+id/hours"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Hours"
        android:id="@+id/textView"
        android:textColor="@color/bordenyellow"
        android:padding="5dp"
        android:layout_marginLeft="-10dp"
        />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="10"
        android:textSize="60dp"
        android:paddingTop="5dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        android:textColor="@color/bordenyellow"
        android:typeface="sans"
        android:id="@+id/minutes"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Minutes"
        android:id="@+id/textView3"
        android:textColor="@color/bordenyellow"
        android:padding="5dp"
        android:layout_marginLeft="-7dp"
        />

</LinearLayout>

如您所见,我将log语句放入run方法中以测试我的代码,它可以正常工作,这是我的logcat:

05-03 18:24:30.874    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:31.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:31.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:32.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:32.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:33.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:33.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:34.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:34.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:35.874    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:35.874    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38
05-03 18:24:36.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 6
05-03 18:24:36.878    8011-8029/com.bordengrammar.bordengrammarapp E/Logger﹕ 38

我不知道如何解决此问题,我们将不胜感激!

刀片编码器

切勿Timer在小部件中使用。AnAppWidgetProvider是a BroadcastReceiver,它的意思是仅在很短的时间内保持活动状态以处理接收到的广播意图,然后可以在处理了广播并且onUpdate()方法返回后的任何时候将其销毁(但是窗口小部件将保持可见状态)课程)。

Android通常会每30分钟调用一次小部件更新代码,因此您不必担心手动刷新它,而只需将显示代码(当前输入run())移至即可onUpdate()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

文本未显示在Flutter的有状态小部件中

来自分类Dev

setState Flutter时,PageViewer中的小部件未更改

来自分类Dev

在Dashing小部件中更改moreinfo文本位置

来自分类Dev

在Tkinter文本小部件中更改Backspace效果

来自分类Dev

在 Python Tkinter 小部件中更改(更新)文本

来自分类Dev

Qt:文本中的小部件

来自分类Dev

更改QTabWidget中的小部件

来自分类Dev

更改QTabWidget中的小部件

来自分类Dev

颤振-小部件的状态未更改

来自分类Dev

如何更改按钮小部件的文本大小?

来自分类Dev

更改树小部件节点的文本

来自分类Dev

更改树小部件节点的文本

来自分类Dev

在Tkinter文本框小部件中更改每隔一行文本的背景颜色

来自分类Dev

Tcl / Tk:高亮显示文本小部件中的某些行或更改特定行文本的颜色

来自分类Dev

如何在“文本”小部件中更改子文本的颜色(Python)

来自分类Dev

框架中的ttk小部件未显示

来自分类Dev

Flutter:行中的小部件未对齐

来自分类Dev

在文本中反应小部件(静态HTML)

来自分类Dev

Tkinter文本小部件中的撤消功能

来自分类Dev

文本小部件Tkinter中的行号间距

来自分类Dev

更改购物车小部件Woocommerce中的“查看购物车”和“结帐”按钮文本

来自分类Dev

Python 3 Tkinter | 更改文本小部件中“:”之间单词的颜色/样式

来自分类Dev

在Tkinter中更改按钮小部件的大小

来自分类Dev

值更改后窗口小部件宽度未更新

来自分类Dev

在 Tkinter 中的文本小部件中添加文本链接

来自分类Dev

文本小部件tkinter

来自分类Dev

更改Kivy小部件的文本部分的颜色

来自分类Dev

如何更改Flutter默认时间选择小部件文本?

来自分类Dev

更改Kivy小部件的文本部分的颜色

Related 相关文章

热门标签

归档