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
import 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();
}
}
Alles anzeigen
Kapitelausgabe Class
Java
import 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);
}
}
Alles anzeigen