Danke für den Hinweis. Es hat geklappt.
Beiträge von ReinerCY
-
-
Hallo,
ich habe eine LIstview, in der ich bei onResume die Elemente ändern möchte.
In der Liste werden Kapitel angezeigt.
Beim klick auf ein Element wird eine neue Activity aufgerufen, in der das Kapitel angezeigt wird.
Darunter sind 3 Buttons:
1. Zum vorherigen Kapitel wechseln
2. Zum nächsten Kapitel wechseln
3. Zur LIste zurück.Nun habe ich das Problem, dass ich bei onResume keinen Zugriff auf das Array der Listenelemente habe.
Was muss ich ändern?Listview Class
Java
Alles anzeigenimport android.app.Activity; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toast; public class EBook<T> extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; String myChapter; public static ArrayAdapter adapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ebook); // Zuletzt aufgerufenes Kapitel ermitteln SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); myChapter = settings.getString("chapter", ""); // Kapitelliste belegen final String[] chapters = getResources().getStringArray(R.array.chapterlist); // Aktuelles Kapitel markieren (*) for (int i=0; i<chapters.length; i++) { if (myChapter.compareTo(chapters[i]) == 0) { chapters[i] = "*"+chapters[i]; } } // Listview anzeigen final ListView lv = (ListView) findViewById(R.id.listView1); adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, chapters); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName()+".Chapter"); myChapter = lv.getAdapter().getItem(arg2).toString(); if (myChapter.startsWith("*")) { myChapter = myChapter.substring(1); } // Ausgewähltes Kapitel speichern SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("chapter", myChapter); editor.commit(); intent.putExtra("selected", lv.getAdapter().getItem(arg2).toString()); startActivity(intent); } }); } @Override protected void onResume() { super.onResume(); // Aktuelles Kapitel lesen, um in der Liste mit (*) zu markieren. SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); myChapter = settings.getString("chapter", ""); Toast.makeText(getApplicationContext(), "Kapitel:"+myChapter, Toast.LENGTH_SHORT).show(); // Hier möchte ich das entsprechende Listenelement (chapter[i]) ändern, // aber ich habe keinen Zugriff auf das Array. /* for (int i=0; i<chapters.length; i++) { if (chapters[i].substring(0, 1).compareTo("*") == 0) { chapters[i] = chapters[i].substring(1); } if (myChapter.compareTo(chapters[i]) == 0) { chapters[i] = "*"+chapters[i]; } } */ adapter.notifyDataSetChanged(); } }
Kapitelausgabe Class
Java
Alles anzeigenimport android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.os.Bundle; import android.os.Handler; import android.view.Display; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.Button; import android.widget.Toast; public class Chapter extends Activity { public static final String PREFS_NAME = "MyPrefsFile"; String chapter, chapterstar, datei, prevchapter, nextchapter, mychapter; int currentSize, myCurrentSize, myPostionX; WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chapter); final String[] chapters = getResources().getStringArray(R.array.chapterlist); Intent intent = getIntent(); chapter = intent.getStringExtra("selected"); if (chapter.substring(0, 1).compareTo("*") == 0) { // Letzte Scroll-Position und Schriftgroesse lesen SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); myPostionX = settings.getInt("positionX", 0); myCurrentSize = settings.getInt("currentSize", 16); } else { myPostionX = 0; myCurrentSize = 16; } // Vorheriges und nächstes Kapitel belegen for (int i=0; i<chapters.length; i++) { if (chapter.compareTo(chapters[i]) == 0) { if (i==0) { prevchapter = ""; } else { prevchapter = chapters[i-1]; } if (i==chapters.length-1) { nextchapter = ""; } else { nextchapter = chapters[i+1]; } } } // Kapitel in WebView ausgeben mWebView = (WebView) findViewById(R.id.webChapter); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/ebook/"+chapter+".html"); mWebView.setWebViewClient(new WebViewClient() { public void onPageFinished(WebView view, String url) { // SLEEP 1.5 SECONDS HERE ... Handler handler = new Handler(); handler.postDelayed(new Runnable() { public void run() { // Schriftgroesse festlegen und zu letzter Position scrollen mWebView.getSettings().setDefaultFontSize(myCurrentSize); mWebView.scrollTo(0, myPostionX); Toast.makeText(getApplicationContext(), "Position:"+myPostionX+"\nSize:"+myCurrentSize, Toast.LENGTH_SHORT).show(); } }, 1500); } }); // Zum vorherigen Kapitel wechseln final Button prevbutton = (Button) findViewById(R.id.prev); prevbutton.setText(prevchapter); prevbutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName()+".Chapter"); intent.putExtra("selected", prevchapter); startActivity(intent); finish(); } }); // Zur ListView zurück final Button indexbutton = (Button) findViewById(R.id.index); indexbutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { myCurrentSize = mWebView.getSettings().getDefaultFontSize(); myPostionX = mWebView.getScrollY(); // Aktuelles Kapitel, Schriftgroesse und Scroll-Position ermitteln und speichern SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("chapter", chapter); editor.putInt("positionX", myPostionX); editor.putInt("currentSize", myCurrentSize); editor.commit(); finish(); } }); // Zum nächsten Kapitel wechseln final Button nextbutton = (Button) findViewById(R.id.next); nextbutton.setText(nextchapter); nextbutton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName()+".Chapter"); intent.putExtra("selected", nextchapter); startActivity(intent); finish(); } }); } @Override protected void onPause() { super.onPause(); myCurrentSize = mWebView.getSettings().getDefaultFontSize(); myPostionX = mWebView.getScrollY(); // Aktuelles Kapitel, Schriftgroesse und Scroll-Position ermitteln und speichern SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("chapter", chapter); editor.putInt("positionX", myPostionX); editor.putInt("currentSize", myCurrentSize); editor.commit(); } protected void onResume() { super.onResume(); if (chapter.substring(0, 1).compareTo("*") == 0) { // Letzte Scroll-Position und Schriftgroesse lesen SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); myPostionX = settings.getInt("positionX", 0); myCurrentSize = settings.getInt("currentSize", 16); } else { myPostionX = 0; myCurrentSize = 16; } mWebView.getSettings().setDefaultFontSize(myCurrentSize); mWebView.scrollTo(0, myPostionX); } }
-
Hallo, ich habe ein TabHost mit 4 Tabs. In einem Tab wird eine LIstview angezeigt in der bei Klick eine WebView aufgerufen wird. Beim Aufruf stürzt die App ab.
HTML
Alles anzeigenpublic class LeseprobeActivity<T> extends Activity { static final int MENU_IMPRESSUM = 0; static final int MENU_EXIT = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.leseprobeactivity); List valueList = new ArrayList<String>(); valueList.add("Titel"); valueList.add("Impressum"); valueList.add("Prolog"); valueList.add("Kapitel 1"); valueList.add("Kapitel 2"); valueList.add("Kapitel 3"); valueList.add("Kapitel 4"); valueList.add("Kapitel 5"); valueList.add("Kapitel 6"); valueList.add("Kapitel 7"); valueList.add("Kapitel 8"); valueList.add("Kapitel 9"); valueList.add("Kapitel 10"); valueList.add("Kapitel 11"); valueList.add("Kapitel 12"); valueList.add("Kapitel 13"); valueList.add("Kapitel 14"); valueList.add("Kapitel 15"); valueList.add("Kapitel 16"); valueList.add("Kapitel 17"); valueList.add("Kapitel 18"); valueList.add("Kapitel 19"); valueList.add("Kapitel 20"); valueList.add("Kapitel 21"); valueList.add("Kapitel 22"); valueList.add("Kapitel 23"); valueList.add("Kapitel 24"); valueList.add("Kapitel 25"); valueList.add("Kapitel 26"); valueList.add("Kapitel 27"); valueList.add("Epilog"); ListAdapter adapter = new ArrayAdapter<T>(getApplicationContext(), android.R.layout.simple_list_item_1, valueList); final ListView lv = (ListView)findViewById(R.id.listView1); lv.setAdapter(adapter); lv.setOnItemClickListener(new OnItemClickListener() { // @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { Intent intent = new Intent(); intent.setClassName(getPackageName(), getPackageName()+".ChapterActivity"); intent.putExtra("selected", lv.getAdapter().getItem(arg2).toString()); startActivity(intent); } }); } }
HTML
Alles anzeigenpublic class ChapterActivity extends Activity { WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chapter); mWebView = (WebView) findViewById(R.id.webChapter); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/info.html"); } }
HTML
Alles anzeigen04-22 10:23:30.536: W/Resources(592): Converting to string: TypedValue{t=0x12/d=0x0 a=2 r=0x7f050004} 04-22 10:23:30.617: D/dalvikvm(592): GC_FOR_ALLOC freed 101K, 3% free 9153K/9347K, paused 76ms 04-22 10:23:30.726: I/dalvikvm-heap(592): Grow heap (frag case) to 18.370MB for 9817472-byte allocation 04-22 10:23:30.866: D/dalvikvm(592): GC_CONCURRENT freed 5K, 2% free 18734K/18951K, paused 8ms+6ms 04-22 10:23:32.907: D/dalvikvm(592): GC_FOR_ALLOC freed 0K, 2% free 18735K/18951K, paused 40ms 04-22 10:23:33.156: I/dalvikvm-heap(592): Grow heap (frag case) to 39.431MB for 22089292-byte allocation 04-22 10:23:33.296: D/dalvikvm(592): GC_CONCURRENT freed 0K, 1% free 40306K/40583K, paused 5ms+10ms 04-22 10:23:34.656: D/gralloc_goldfish(592): Emulator without GPU emulation detected. 04-22 10:23:36.936: W/webcore(592): java.lang.Throwable: EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up. 04-22 10:23:36.936: W/webcore(592): at android.webkit.WebViewCore$EventHub.removeMessages(WebViewCore.java:1683) 04-22 10:23:36.936: W/webcore(592): at android.webkit.WebViewCore$EventHub.access$7900(WebViewCore.java:926) 04-22 10:23:36.936: W/webcore(592): at android.webkit.WebViewCore.removeMessages(WebViewCore.java:1795) 04-22 10:23:36.936: W/webcore(592): at android.webkit.WebView.sendOurVisibleRect(WebView.java:2917) 04-22 10:23:36.936: W/webcore(592): at android.webkit.ZoomManager.setZoomScale(ZoomManager.java:593) 04-22 10:23:36.936: W/webcore(592): at android.webkit.ZoomManager.access$1700(ZoomManager.java:49) 04-22 10:23:36.936: W/webcore(592): at android.webkit.ZoomManager$PostScale.run(ZoomManager.java:984) 04-22 10:23:36.936: W/webcore(592): at android.os.Handler.handleCallback(Handler.java:605) 04-22 10:23:36.936: W/webcore(592): at android.os.Handler.dispatchMessage(Handler.java:92) 04-22 10:23:36.936: W/webcore(592): at android.os.Looper.loop(Looper.java:137) 04-22 10:23:36.936: W/webcore(592): at android.app.ActivityThread.main(ActivityThread.java:4424) 04-22 10:23:36.936: W/webcore(592): at java.lang.reflect.Method.invokeNative(Native Method) 04-22 10:23:36.936: W/webcore(592): at java.lang.reflect.Method.invoke(Method.java:511) 04-22 10:23:36.936: W/webcore(592): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-22 10:23:36.936: W/webcore(592): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-22 10:23:36.936: W/webcore(592): at dalvik.system.NativeStart.main(Native Method) 04-22 10:25:09.216: D/AndroidRuntime(592): Shutting down VM 04-22 10:25:09.216: W/dalvikvm(592): threadid=1: thread exiting with uncaught exception (group=0x409c01f8) 04-22 10:25:09.246: E/AndroidRuntime(592): FATAL EXCEPTION: main 04-22 10:25:09.246: E/AndroidRuntime(592): android.content.ActivityNotFoundException: Unable to find explicit activity class {de.siebenverlag.ebookverhaengnisvoll/de.siebenverlag.ebookverhaengnisvoll.ChapterActivity}; have you declared this activity in your AndroidManifest.xml? 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1508) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1384) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.Activity.startActivityFromChild(Activity.java:3458) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.Activity.startActivityForResult(Activity.java:3210) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.Activity.startActivity(Activity.java:3297) 04-22 10:25:09.246: E/AndroidRuntime(592): at de.siebenverlag.ebookverhaengnisvoll.LeseprobeActivity$1.onItemClick(LeseprobeActivity.java:45) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.widget.AdapterView.performItemClick(AdapterView.java:292) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.widget.AbsListView.performItemClick(AbsListView.java:1058) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2514) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.widget.AbsListView$1.run(AbsListView.java:3168) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.os.Handler.handleCallback(Handler.java:605) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.os.Handler.dispatchMessage(Handler.java:92) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.os.Looper.loop(Looper.java:137) 04-22 10:25:09.246: E/AndroidRuntime(592): at android.app.ActivityThread.main(ActivityThread.java:4424) 04-22 10:25:09.246: E/AndroidRuntime(592): at java.lang.reflect.Method.invokeNative(Native Method) 04-22 10:25:09.246: E/AndroidRuntime(592): at java.lang.reflect.Method.invoke(Method.java:511) 04-22 10:25:09.246: E/AndroidRuntime(592): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 04-22 10:25:09.246: E/AndroidRuntime(592): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 04-22 10:25:09.246: E/AndroidRuntime(592): at dalvik.system.NativeStart.main(Native Method)
-
vielen Dank. Das Speichern und Auslesen funktioniert.
Jetzt habe ich aber noch das Problem, dass beim starten der Activity nicht zu der Position gescrollt wird.
Ich vermute, dass es zu lange dauert, bis die Datei geladen ist.
Gibt es eine Möglichkeit zu warten bis die Datei geladen ist?JavaWebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.leseprobeactivity); mWebView = (WebView) findViewById(R.id.webLeseprobe); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/leseprobe.html"); hier müsste das Programm warten, bis die Datei geladen ist und dann das Scrollen ausführen. }
Javaprotected void onPause() { super.onPause(); myPostionX = mWebView.getScrollY(); // SharedPreferences setzen mit Editor SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); SharedPreferences.Editor editor = settings.edit(); editor.putInt("positionX", myPostionX); editor.commit(); // Commit the edits! }
-
Danke.
getScrollX(), getScrollY() und scrollTo() funktioniert, aber wie und wo könnte ich die Informationen speichern?
Für einen Beispiel-Code wäre ich sehr dankbar, da ich noch absoluter Anfänger bin.
-
Hallo,
ich habe eine WebView in der ein langer Text angezeigt wird.
Nun möchte ich, dass beim nächsten mal, wenn die App gestartet wird, die Ansicht wieder zu der gleichen Position springt und nicht wieder ganz oben steht. Ist das in einer WebView möglich?Das gleiche Problem habe ich, wenn ich den Bildschirm drehe. Auch dabei müsste die Position gemerkt werden.
Java
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <WebView android:id="@+id/webLeseprobe" android:layout_width="fill_parent" android:layout_height="fill_parent" > </WebView> </LinearLayout>
Java
Alles anzeigenpackage de.test.leseprobe; public class LeseprobeActivity extends Activity { WebView mWebView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.leseprobeactivity); mWebView = (WebView) findViewById(R.id.webLeseprobe); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("file:///android_asset/leseprobe.html"); } }
-
Danke, genau das hat gefehlt.
-
Hallo,
ich möchte ein Image scrollbar anzeigen.
Es wird in der Breite passend angezeigt (fill_parent) und in der Höhe soll es scrollbar sein.
Das funktioniert auch, jedoch werden über und unter dem Bild leere Bereiche angezeigt.[Blockierte Grafik: http://www.bilder-hochladen.net/files/big/jbyt-1-c4ca.jpg]
Java
Alles anzeigen<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/widget54" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/cover" android:layout_width="fill_parent" android:layout_height="wrap_content" android:contentDescription="@+id/app_name" android:src="@drawable/cover" /> </ScrollView>