У меня есть виджет домашнего экрана с текстовым обзором, который отображает дату, и индикатор выполнения, который отображает значение c. Оба значения для представлений считываются из файла каталога каждый раз, когда виджет обновляется. Текстовое представление обновляется без каких-либо проблем, однако индикатор выполнения просто не обновляется. Я в недоумении, почему это может быть. Полное раскрытие: я абсолютный новичок, когда дело доходит до android. Кроме того, не обращая внимания на избыточные операторы if и progress = 0, я добавил это как способ проверки правильности чтения файла.
Java код:
public class WidgetProvider extends AppWidgetProvider {
private void updateProgress(int progress){
//ProgressBar progressBar = (ProgressBar) findViewById()
}
private StringBuilder getText(InputStream inputStream) {
StringBuilder stringBuilder = new StringBuilder();
try {
if (inputStream != null) {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String newLine = null;
while ((newLine = bufferedReader.readLine()) != null) {
stringBuilder.append(newLine);
}
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}return stringBuilder;
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context,appWidgetManager,appWidgetIds);
ComponentName thisWidget = new ComponentName(context,
WidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
//set text for label
CharSequence widgetText = context.getString(R.string.appwidget_text);
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
views.setTextViewText(R.id.id_label, widgetText);
/*Set countdown timer.
new CountDownTimer(50000,1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
}
}.start();*/
int progress = 0;
String deadline = "";
InputStream inputStream = context.getResources().openRawResource(R.raw.deadline);
String str = getText(inputStream).toString();
StringTokenizer stringTokenizer = new StringTokenizer(str, ",");
while (stringTokenizer.hasMoreTokens()) {
deadline = stringTokenizer.nextToken();
progress = Integer.parseInt(stringTokenizer.nextToken());
}
//set deadline text
remoteViews.setTextViewText(R.id.textView_deadline, deadline);
//Test statement
if (progress == 0) {
views.setProgressBar(R.id.progressBar0,100,80,false);
views.setTextViewText(R.id.textView_progress, deadline);
System.out.println(deadline);
System.out.println(progress);
//sets progress bar value
switch (progress) {
case 0:
views.setProgressBar(R.id.progressBar0,100,0,false);
views.setTextViewText(R.id.textView_progress, "0%");
break;
case 10:
views.setProgressBar(R.id.progressBar0, 100, 10, false);
views.setTextViewText(R.id.textView_progress, "10%");
break;
case 20:
views.setProgressBar(R.id.progressBar0, 100, 20, false);
views.setTextViewText(R.id.textView_progress, "20%");
break;
case 30:
views.setProgressBar(R.id.progressBar0, 100, 30, false);
views.setTextViewText(R.id.textView_progress, "30%");
break;
case 40:
views.setProgressBar(R.id.progressBar0, 100, 40, false);
views.setTextViewText(R.id.textView_progress, "40%");
break;
case 50:
views.setProgressBar(R.id.progressBar0, 100, 50, false);
views.setTextViewText(R.id.textView_progress, "50%");
break;
case 60:
views.setProgressBar(R.id.progressBar0, 100, 60, false);
views.setTextViewText(R.id.textView_progress, "60%");
break;
case 70:
views.setProgressBar(R.id.progressBar0, 100, 70, false);
views.setTextViewText(R.id.textView_progress, "70%");
break;
case 80:
views.setProgressBar(R.id.progressBar0, 100, 80, false);
views.setTextViewText(R.id.textView_progress, "80%");
break;
case 90:
views.setProgressBar(R.id.progressBar0, 100, 90, false);
views.setTextViewText(R.id.textView_progress, "90%");
break;
case 100:
views.setProgressBar(R.id.progressBar0, 100, 100, false);
views.setTextViewText(R.id.textView_progress, "100%");
break;
default:
views.setProgressBar(R.id.progressBar0, 100, -1, false);
views.setTextViewText(R.id.textView_progress, "null");
}
}else
System.out.println("ERROR.");
// Register an onClickListener
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context,0,intent,0);
remoteViews.setOnClickPendingIntent(R.id.textView_deadline,pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}
Вот xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
style="@style/widget_views"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:background="@drawable/widget_background"
android:orientation="horizontal">
<TextView
android:id="@+id/id_label"
style="@style/widget_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="8dp"
android:text="Dysgu"
android:textAlignment="center"
android:textColor="@android:color/white"
android:textSize="30sp" />
<ImageView
android:id="@+id/imageView_logo"
android:layout_width="70dp"
android:layout_height="60dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="false"
android:layout_marginEnd="4dp"
android:layout_marginRight="4dp"
tools:srcCompat="@drawable/logo_base" />
<TextView
android:id="@+id/label_progress"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="65dp"
android:text="Your Progress "
android:textColor="@android:color/background_light"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@+id/id_label" />
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="291dp"
android:layout_height="31dp"
android:layout_above="@id/textView_deadline"
android:layout_alignParentTop="false"
android:layout_alignParentRight="false"
android:layout_marginStart="13dp"
android:layout_marginLeft="13dp"
android:layout_marginTop="60dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="16dp"
android:layout_toEndOf="@+id/label_progress"
android:layout_toRightOf="@+id/label_progress">
<ProgressBar
android:id="@+id/progressBar0"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="30dp"
android:background="#7EFFFFFF"
android:clickable="false"
android:max="100" />
<TextView
android:id="@+id/textView_progress"
android:layout_width="293dp"
android:layout_height="33dp"
android:gravity="center"
android:textColor="@android:color/background_light"
android:textStyle="bold" />
</FrameLayout>
<TextView
android:id="@+id/label_deadline"
android:layout_width="60dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="16dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="28dp"
android:layout_marginBottom="26dp"
android:text="Your Deadline "
android:textColor="@android:color/background_light"
android:textStyle="bold" />
<TextView
android:id="@+id/textView_deadline"
android:layout_width="wrap_content"
android:layout_height="31dp"
android:layout_alignBottom="@id/label_deadline"
android:layout_alignParentRight="true"
android:layout_marginStart="14dp"
android:layout_marginLeft="14dp"
android:layout_marginTop="8dp"
android:layout_marginRight="7dp"
android:layout_marginBottom="3dp"
android:layout_toEndOf="@+id/label_deadline"
android:layout_toRightOf="@+id/label_deadline"
android:background="#40FFFCFC"
android:textColor="@android:color/background_light"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="@id/label_deadline"
app:layout_constraintStart_toEndOf="@+id/label_deadline"
app:layout_constraintTop_toBottomOf="@+id/frameLayout" />
</RelativeLayout>
Опять же, если я упустил что-то нелепо очевидное, прошу прощения за мое невежество , Заранее спасибо.