Welche Methoden gibt es um lange Texte darzustellen

  • 16 Antworten
  • Letztes Antwortdatum
mwall

mwall

Neues Mitglied
0
Hallo zusammen
Ich will eine App machen mit Witzen und coole Sprüche.
Jetzt frag ich mich,wie ich die ganzen Sprüche abspeicher und das möglichst wenig Programmierarbeit ist, denn man kann ja nicht für jeden Witz eine neue XML datei erstellen (also auch java classe) und den Witz dann direkt in die XML reinschreiben.
Also Ziel ist es, das man einen Witz nach den anderen mit einen vertikalen Wisch aufrufen kann wie man die Witzeapps ja so schon kennt.
Ich habs schon damit versucht, diese in eine HTML abzuspeichern, aber erstens muss mann dann jeden witz in eine eigene html datei tun und zweitens sieht das im WebView nicht so gut aus.

Wer hat gute ideen?
Vielen Dank schonmal:lol:
 
Zuletzt bearbeitet:
Tu doch die Witze in eine Datenbank und lies sie dort dann raus. Oder packe deine Witze alle in Strings.xml und adressiere diese dann.
 
Vielen Dank Jaiel schon mal.
Schreib ich die dann komplett einfach so in die Datenbank (optisch betrachtet einfach Witz unter Witz) und dann in z.b der Spalte daneben die Überschrift wenn ich das richtig verstanden hab!?

Wie geht das mit den wechseln der Witze also schreib ich die in ein scrollview und dann wie krieg ich den nächsten Witz dahin, sodass da auch so ein sleide Effekt entsteht.
 
Du könntest alle strings auch in den Speicher laden Textviews erstellen und diese mit den Strings befüllen und anschließend die TextViews zur ScrollView hinzufügen, falls ich dein Vorschlag richtig verstanden habe geht das in so etwas.

Ein Webspace würde sich dafür auch eignen. So dass der User sich Witze in einem Packet runterladen kann bei Bedarf zum Beispiel...
Somit kannst du im Nachhinein noch Witze zur Verfügung stellen und brauchst die App erstmal nur mit ein paar Witzen /Witzpaketen zu füllen

Aber ist deine Sache was du da anstellst

Das mit dem Wisch hab ich nicht so ganz kapiert....

Möchtest du die Witze per Überschrift in deiner ScrollView haben und wenn der User die anklickt öffnet sich erst der Witz oder willst du wirklich per wisch den nächsten Witz anzeigen ohne den User einen aussuchen zu lassen.

Da könntest du einfach nur eine TextView verändern und bei Zeiten dann den Text darin ändern das wäre leichter sogar da es nur darum gehen würde den Inhalt der TextView zu ändern...
 
Vergiss das mit der Überschrift
Also der Benutzer hat Kategorien mit Witzen. Wenn er da drauf geht soll der wie bei einem Buch zum nächsten Witz wischen (zur Seite wegschiebe) und dass dann halt immer so weiter. Ich will nicht einfach den Text ändern, da das nicht so schön aus sieht. Also am liebsten zieht man den alten Witz nach links und der neue kommt dann gleichzeitig von rechts.
Hast du ne Idee?

Vielen dank schonmal
 
Kardroid schrieb:
@mwall: Dafür verwendet man normalerweise ViewPager:
Using ViewPager for Screen Slides | Android Developers
Ah vielen dank dir. Sowas hab ich gesucht. Kann man das auch oben ohne die scrollbar machen und braucht man dann nicht für jede Seite eine eigene class?
Das war nämlich das was ich verhindern wollte weil sonst hab ich da ja bei 100 witzaeiten auch 100 Java Claussen und XML Dateien oder?
 
Hi,

klar geht das, mach einfach mal das Beispiel nach.
 
ok
ich hab das beispiel jetzt nachgemacht aber wie kann ich das machen, das wenn ich die app starte und dann gibts da verschiedene kategorien(flachwitze,sprüche...) das ich dann mit dem entsprechenden button auf die Seite komme. Das geht ja noch aber wenn ich jetzt auf der ersten seite von sprüche bin und ich eins zurückscrolle will ich auf die letzt flachwitzseite, wie bei einem buch wenn ich kapitel 3 Aufschlage und eins zurückscrolle komm ich auf die letzte Kapitel 2 seite
Vielen dank schonmal ;)
 
So was kann man mit doppelt verketteten Listen erreichen. Wie möchtest du die Witze darstellen im Code? Als Objekte einer Witze Klasse könnte ich mir das vorstellen. Diese einfach in die verkettete Liste laden. Und mit einem ...Ich wollte gerade Zeiger sagen. Ich weiß die Implementierung solch einer Liste leider nur in C/C++.
Anstatt mit Zeigern kann man ja mit Referenzen arbeiten in Java.
 
Ok danke schonmal
Ich hab zwar kein plan was doppelt verkettete Listen sind aber wofür gibts google ;)
 
@mwall: Das würde ich folgenderweise machen:
Ich würde ALLE Witz in der richtigen Reihenfolge in dein Array mitteinander verknüpfen. Dann weißst du ja, das Witz 61 noch Kategorie1 ist und Witz 62 Kategorie2.
Jetzt zeigst du beim Button für Kategorie2 einfach Witz 62 an.
Wenn du alles richtig implementiert hast bekommst du auch keine Probleme mit dem Speicher oder so, da die Android Implementierung nur X-Seiten im Speicher behält beim "Page weiter scrollen"
 
  • Danke
Reaktionen: mwall
Ich sehe bei Kardoids Ansatz den Schwachpunkt das wenn neue Witze hinzukommen sollten das man das im Code berücksichtigen muss damit jetzt Witz 62 zum Beispiel zur 1. Kategorie gehört weil er neu ist und das Array nach hinten verschoben werden muss.

Hier ein Link zur Implementierung von doppelt verletzten Listen :
Javabeginners - Doppelt verkettete Liste

Alternativ gibt es die LinkedList in der Java API ;)

(Listen, Arrays, Binary trees etc. Sollte man in den Anfängen des Programmieren schon kennenlernen)

Gib deiner Klasse dann als Parameter eine Kategorie mit als Enum implementiert und du kannst fröhlich Witze einfügen wo du möchtest.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: mwall
vielen dank jaiel
das sieht richtig gut aus
ich probier es jetzt mal

aber ein problem ist noch
ich hab in der liste zwei String(1.Überschrift vom Witz und 2. ist der Witz)
stand jetzt beginnt die Liste bei jeden start am Anfang. Aber wie kann ich sagen mit einer ONClick wenn ich auf ein Button drücke, das er bei der Liste bei der 2.Kategorie(Sprüche) anfangen soll
[DOUBLEPOST=1441618368,1441617441][/DOUBLEPOST]public class MainActivity extends FragmentActivity {

ViewPager vp;

String kategorie;

@override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
vp = (ViewPager)findViewById(R.id.vp_biodata);
ControllerFragment cf = new ControllerFragment(getSupportFragmentManager(), getFragments());
//wenn man das kommende weglässt, wird der text einfach zur seite gewechselt und nicht so von hintenseitlich
vp.setPageTransformer(true, new ZoomOutPageTransformer());
vp.setAdapter(cf);

}

List<Fragment> list = new ArrayList();
private List<Fragment> getFragments(){
//List<Fragment> list = new ArrayList();

list.add(ModelFragment.newInstance(getResources().getString(R.string.u_neuer),getResources().getString(R.string.t_neuer), R.drawable.lachgesicht));
list.add(ModelFragment.newInstance(getResources().getString(R.string.u_affe),getResources().getString(R.string.t_affe), R.drawable.lachgesicht));
list.add(ModelFragment.newInstance(getResources().getString(R.string.u_idiot),getResources().getString(R.string.t_idiot), R.drawable.lachgesicht));
list.add(ModelFragment.newInstance(getResources().getString(R.string.u_pilot),getResources().getString(R.string.t_pilot), R.drawable.lachgesicht));
list.add(ModelFragment.newInstance(getResources().getString(R.string.u_ratte),getResources().getString(R.string.t_ratte), R.drawable.lachgesicht));
list.add(ModelFragment.newInstance(getResources().getString(R.string.u_zoll),getResources().getString(R.string.t_zoll), R.drawable.lachgesicht));

list.add(ModelFragment.newInstance(getResources().getString(R.string.u_spruch1),getResources().getString(R.string.t_spruch1), R.drawable.lachgesicht));

list.add(ModelFragment.newInstance(getResources().getString(R.string.u_weish1),getResources().getString(R.string.t_weish1), R.drawable.lachgesicht));


return list;
}



public class ControllerFragment extends FragmentPagerAdapter{
List<Fragment> fragments;
Context context;
public ControllerFragment(FragmentManager fm, List<Fragment> fragments){
super(fm);
this.fragments = fragments;
}

public Fragment getItem(int position){
return fragments.get(position);
}

public int getCount(){

return fragments.size();
}

public Object instantiateItem(View view, int position){
ScrollView linearLayout = (ScrollView) view.inflate(context, R.layout.custom_fragment, null);
TextView textview = (TextView) linearLayout.findViewById(R.id.tv_text);
ImageView imageview = (ImageView) linearLayout.findViewById(R.id.iv_image);
((ViewPager)view).addView(linearLayout);
return linearLayout;
}
}



public class ModelFragment extends Fragment{
public static final String _text ="text";
public static final String _text2 ="text2";
public static final String _image ="image";

public static ModelFragment newInstance (String text1, String text2,int image){
ModelFragment mf = new ModelFragment();
Bundle bundle = new Bundle();
bundle.putString(_text, text1);
bundle.putString(_text2, text2);
bundle.putInt(_image, image);
mf.setArguments(bundle);
return mf;

}


@override
public View onCreateView(LayoutInflater inflater, ViewGroup group,
Bundle bundle) {
View view = inflater.inflate(R.layout.custom_fragment, group,false);
String text = getArguments().getString(_text);
String text2 = getArguments().getString(_text2);
int image = getArguments().getInt(_image);
TextView textview = (TextView) view.findViewById(R.id.tv_text);
TextView textview2 = (TextView) view.findViewById(R.id.tv_text2);
ImageView imageview = (ImageView) view.findViewById(R.id.iv_image);
textview.setText(text);
textview2.setText(text2);
imageview.setImageResource(image);
return view;
}
}


das sind die 3 Hauptklassen die jetzt relevant sind
es gibt noch die klasse Hauptmenue.java , bei der die buttons sind, mit dem man die verschiedenen kategorien auswählen soll
das ist jetzt ein anderer versuch nicht wie der auf android.developer.com
 
Hi.

Wo beginnt deine 2. Kategorie? Man kann die Liste durchlaufen und das erste Element der 2. Kategorie ansteuern.

Wenn du die doppelt verk. Liste nimmst. Einfach bei Kategorie 1 also erstes Element anfangen und durchlaufen lassen bis man das erste Element mit der gesuchten Kategorie findet.

Oder bei Start der App einmal komplett durchlaufen lassen und die Buttons den 1. ElementeN jeder Kategorie schon mal zu weisen.
 
hört sich gut an
aber wie setzt man die verschiedenen kategorien den dementsprechenden Elementen zuweisen und wie ruft man das die verschiedene kategorien auf.
hast du vllt einen link der alle funktionen davon erklärt?
 
Du weißt doch deine Kategorien selber zu. Zum Beispiel 1 2 3 oder so. Beim durchgehen der Liste fragst du das Element dann nach seiner Kategorie einfach :)
 
Zurück
Oben Unten