E
EmmZett
Neues Mitglied
- 0
Hallo zusammen,
ich habe ein kleines, einfaches Widget programmiert mit dem ich Vokabeln lernen möchte.
Die Idee dahinter:
Ich sammel Vokabeln in einer txt Datei, diese wird vom Widget eingelesen und dann werden nacheinander die einzelnen Textzeilen angezeigt.
Ich habe das Widget nach diesem Tutorial programmiert.
Hier mein Code:
Soweit klappt auch alles.
Ich würde nur gerne ncoh zwei Dinge ändern und hoffe dabei auf eure Hilfe.
1) Bisher habe ich es nur geschafft die einzelnen Zeilen der Textdatei auf Zufallsbasis anzuzeigen. Ich würde aber gerne, dass das Widget die Zeilen von der ersten bis zur letzten anzeigt und dann von vorne beginnt. Wie kann ich das umsetzen?
2) Ich denke es ist ziemlich uneffektiv dass die txt datei bei jedem Widgetupdate neu eingelesen wird. Besteht die Möglichkeit, dass die Datei eingelesen wird wenn das Widget auf dem Homescreen platziert wird und dann nur noch die einzelnen Zeilen angezeigt werden?
Schonmal danke für Ratschläge
ich habe ein kleines, einfaches Widget programmiert mit dem ich Vokabeln lernen möchte.
Die Idee dahinter:
Ich sammel Vokabeln in einer txt Datei, diese wird vom Widget eingelesen und dann werden nacheinander die einzelnen Textzeilen angezeigt.
Ich habe das Widget nach diesem Tutorial programmiert.
Hier mein Code:
Code:
package de.mz.vocabwidgeten;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.widget.RemoteViews;
public class MyWidgetProvider extends AppWidgetProvider {
//private static final String ACTION_CLICK = "ACTION_CLICK";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
{
// Get all ids
ComponentName thisWidget = new ComponentName(context,MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
// read & get text file
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"VocabularyEN.txt");
List<String> list = new ArrayList<String>();
try
{
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null)
{
list.add(line);
}
br.close();
}
catch (IOException e) {
//You'll need to add proper error handling here
}
String[] items = new String
[list.size()];
items = list.toArray(items);
for (int widgetId : allWidgetIds)
{
int number = (new Random().nextInt(items.length));
//modify string to show
String[] separated = items[number].split("&&");
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),R.layout.widget_layout);
//Log.w("WidgetExample", separated[0] + "\n -- \n" + separated[1]);
// Set the text
remoteViews.setTextViewText(R.id.update, separated[0] + "\n -- \n" + separated[1]);
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
}
Ich würde nur gerne ncoh zwei Dinge ändern und hoffe dabei auf eure Hilfe.
1) Bisher habe ich es nur geschafft die einzelnen Zeilen der Textdatei auf Zufallsbasis anzuzeigen. Ich würde aber gerne, dass das Widget die Zeilen von der ersten bis zur letzten anzeigt und dann von vorne beginnt. Wie kann ich das umsetzen?
2) Ich denke es ist ziemlich uneffektiv dass die txt datei bei jedem Widgetupdate neu eingelesen wird. Besteht die Möglichkeit, dass die Datei eingelesen wird wenn das Widget auf dem Homescreen platziert wird und dann nur noch die einzelnen Zeilen angezeigt werden?
Schonmal danke für Ratschläge