Vor- und Zurückbutton bei Strings in einer Array

  • 23 Antworten
  • Letztes Antwortdatum
J

JonasW

Gast
Hallo ich habe eine Array mit einer großen Anzahl an Strings und nun habe ich schon eine Activity, die mir mit jedem Button-Druck einen zufälligen String aus der Array ausgibt. Nun möchte ich aber eine Activity, die mir per Vor- und Zurückbutton das nächste Item bzw. String in einer textView anzeigt.
Außerdem habe ich eine Textview, die mir anzeigt bei dem wievieltem Item ich gerade bin. Also z.b. "10 von 25". Hier möchte ich dass je nach dem welchen Button man drückt die erste Zahl (10) mit +1 oder -1 berechnet wird.

Bisher habe ich dafür noch keinen Code, aber ich hoffe ihr könnt mir helfen

Mit freundlichen Grüßen

JonasW
 
Was davon schaffst du denn nicht?

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Hier mein Code:


import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.content.DialogInterface;
import android.content.Intent;


public class SortazActivity extends Activity {

Button button1;
Button button2;
TextView tv2;
int i = 0;
String [] titles = getResources().getStringArray(R.array.title_array);




@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sortaz);

tv2=(TextView)findViewById(R.id.textView2);

tv2.setText(titles);

button1=(Button)findViewById(R.id.button1);

button1.setOnClickListener(new OnClickListener() {


@Override
public void onClick(View v) {
i++;


if(i == 5){
i =0;}

tv2.setText(titles);

}
});


button2=(Button)findViewById(R.id.button2);

button2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {

if(i==0)
{
i=4;
}
else
{
i--;
}

tv2.setText(titles);
}

});

}

Wenn ich bei String [] titles = ... direkt Werte in eine eckige Klammer einsetze funktioniert es, aber ich möchte aus meiner Array, in der ich über 200 Items habe, die Werte haben.
 
Und wo ist die Array gespeichert? Ist das "title_array"?

Arrays aus den resources können nur in onCreate instanziert werden.
Du musst also bei den Klassenvariablen ein Array definieren und das in onCreate mit dem Array aus den resources füllen.
 
Könntest du mir da bei dem Code kurz helfen, ich versteh es grad nicht ganz :p
 
Statt
Code:
String[] titles = getResources().getStringArray(R.array.title_array);
kommt nur
Code:
String[] titles;

Dafür in onCreate dann
Code:
titles = getResources().getStringArray(R.array.title_array);
 
Vielen vielen Dank :)

Beide Buttons funktionieren jetzt, aber wenn ich bei dem ersten Element bin und dann den Zurückbutton drücke beendet sich die App

Hoffe du kannst mir da helfen.

Hier der Code nur von Zurückbutton:


@Override
public void onClick(View v) {
titles = getResources().getStringArray(R.array.title_array);
if(i==0)
{
i=245;
}
else
{
i--;
}

tv2.setText(titles);
}

});
 
Versuchs statt festen Werten bei der Position mit titles.length.

Also bei dir:
Code:
@Override
public void onClick(View v) {
titles = getResources().getStringArray(R.array.title_array) ;
if(i==0)
{
i=(titles.lenght - 1);
}
else
{
i--;
}

tv2.setText(titles[i]);
}

});
Minus 1, weil das Array ja bei 0 beginnt.
Ich denke du hast in deinem Array 245 Elemente, richtig? Wenn du es mit konkreten Zahlen haben willst, muss da dann eben 244 als letztes Element hin.

PS:
Wenn du Code postet, benutz bitte den Button für Code ;)
 
Danke und es tut mir wirklich leid, dass ich so oft fragen muss, aber zwei Fragen noch:

1.Wenn ich genau andersrum beim letzen Element bin und vor zum Ersten wieder will, wie machen ich das dort?

2.Wenn ich in der App den Bildschirm drehe lädt die Activity neu und wenn ich z.B. bei dem 5. Element war und drehe bin ich wieder bei 1. Ich will, dass der User weiterhin drehen kann, nur soll die Activity nicht ständig neu laden.
 
Das ist fast identisch, auch mit lentgh-1. Versuchs doch erstmal selber und wenn es nicht klappt, kannst du nochmal fragen.

Beim Drehen wird die Activity zerstört und neu aufgebaut. Wenn du das was beibehalten willst musst du das in savedInstanceState sichern:
Recreating an Activity | Android Developers
 
zu 1.

Ich habs versuch aber nichts hat funktioniert ich hoffe du kannst mir helfen.

zu 2.

Und wenn ich im onSaveInstanceState das Element, an dem der User sich gerade befindet speichern will, welchen value muss ich dann einsetzen:

Code:
savedInstanceState.putInt(titles, ???);
 
Du musst nur bei dem if, die beiden Zeilen tauschen, also Argument und den code mit i=...

Bei putInt ist das erste Argument ein String als Identifikation. Kannst du zum Beispiel "position" nennen. Und das zweite Argument ist dann der integer, bei dir einfach das "i".

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
zu 1:
Ich verstehe nicht wie du dass mit dem vertauschen meinst

zu 2:

Code:
@Override
	public void onSaveInstanceState(Bundle savedInstanceState) {
		
		savedInstanceState.putInt(position_title, i);
		savedInstanceState.putInt(position_count, i1);
	
	}
	
	public void onRestoreInstanceState(Bundle savedInstanceState) {
	    
	    super.onRestoreInstanceState(savedInstanceState);
	    
	    i = savedInstanceState.getInt(position_title);
	    i1 = savedInstanceState.getInt(position_count);
	   
	}

Was habe ich falsch?
 
Stell den zustand mit savedInstanceState in onCreate wieder her.

Bin grade unterwegs, kann keinen code Posten

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Danke das mit der savedInstance funktioniert einwandfrei. Nun habe ich nur noch das 1.Problem
 
Code:
@Override
public void onClick(View v) {
i++;


if(i == (titles.lenght -1)){
i =0;}

tv2.setText(titles[i]);

}
Mehr ist das nicht ;)
 
  • Danke
Reaktionen: JonasW
Danke nun gibt es aber noch immer fast dieses Problem:

Wenn ich nacheinander den Vorbutton drücke komme ich problemlos von 245 zu 1 aber wenn ich bei 245 und dann einmal den Vorbutton drücke, schließt sich die Applikation.
 
Also beim ersten Mal von 245 zu 1 geht es und beim zweiten Mal nicht mehr?

Poste doch mal die LogCat Meldung von dem Absturz.
 
Nein so nicht. Es macht für mich auch keinen Sinn: Wenn ich sag ich mal "durchscroll" , also einfach nur durchklicke, dann geht es, aber wenn ich bei 245 bin und dort einfach "nichts" machen und dann vor drücke passiert es
:

Code:
11-02 18:33:00.718: E/AndroidRuntime(23307): FATAL EXCEPTION: main
11-02 18:33:00.718: E/AndroidRuntime(23307): java.lang.ArrayIndexOutOfBoundsException: length=245; index=245
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at com.example.pornopingpong.SortazActivity$1.onClick(SortazActivity.java:65)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.view.View.performClick(View.java:4240)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.view.View$PerformClick.run(View.java:17721)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.os.Handler.handleCallback(Handler.java:730)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.os.Handler.dispatchMessage(Handler.java:92)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.os.Looper.loop(Looper.java:137)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at android.app.ActivityThread.main(ActivityThread.java:5103)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at java.lang.reflect.Method.invokeNative(Native Method)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at java.lang.reflect.Method.invoke(Method.java:525)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-02 18:33:00.718: E/AndroidRuntime(23307): 	at dalvik.system.NativeStart.main(Native Method)
 
Dann poste doch nochmal bitte den vollständigen Code der Activity.

Wie kommst du denn zu der 245, wenn nicht durch "hinscrollen"?
 
Zurück
Oben Unten