Wie funktioniert ein ArrayList?

  • 9 Antworten
  • Letztes Antwortdatum
mwall

mwall

Neues Mitglied
0
Ich hab schon einen Beitrag mit einen anderen Thema geöffnet, wo ein ArrayList die Lösung war. Nun hab ich folgendes Problem.Ich mach ne app mit Witzen,Sprüchen und Weisheiten. Die soll so sein wie ein Buch, dass man einfach durchblättern kann. Da klappt noch denn ich lasse jeden teil der Liste auf die nächste seite und so kann man bequem durchblätter. Das Problem ist, bei jeden start geht das ja logischerweise am anfang los und stellt dann immer die gleichen witze dar. Das ist ja noch gewollt!!! Aber der nutzer soll im hauptmenü mit Buttons direkt zu den 2.Teil(die Sprüche) gehen können(Stand jetzt muss er sich erstmal durch die witze durchblättern).Ein anderer wichtiger Punkt ist,dass wenn man bei den ersten Spruch mit dem Button hingekommen ist, dass man wenn man eine seite zurückblättert zum letzten witz kommt.Man kann sich das alles wie ein Buch vorstellen(alles Feste seiten und Kapitel(Witze,Sprüche...)). Ich hab jetzt aber kein Plan wie das mit dem ArrayList geht,dass man genau auf die z,b Sprüche kommt.


Code:
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());
        //ControllerFragment cf = new ControllerFragment();
        //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);
       
    }
   
    private List<Fragment> getFragments(){
        List<Fragment> witze = new ArrayList();

            //List<Fragment> list = new ArrayList();
           
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_neuer),getResources().getString(R.string.t_neuer), R.drawable.lachgesicht));
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_affe),getResources().getString(R.string.t_affe), R.drawable.lachgesicht));
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_idiot),getResources().getString(R.string.t_idiot), R.drawable.lachgesicht));
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_pilot),getResources().getString(R.string.t_pilot), R.drawable.lachgesicht));
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_ratte),getResources().getString(R.string.t_ratte), R.drawable.lachgesicht));
            witze.add(ModelFragment.newInstance(getResources().getString(R.string.u_zoll),getResources().getString(R.string.t_zoll), R.drawable.lachgesicht));
           
        /*   
        List<Fragment>spruch = new ArrayList();   
            spruch.add(ModelFragment.newInstance(getResources().getString(R.string.u_spruch1),getResources().getString(R.string.t_spruch1), R.drawable.lachgesicht));
       
        List<Fragment>weisheit = new ArrayList();   
            weisheit.add(ModelFragment.newInstance(getResources().getString(R.string.u_weish1),getResources().getString(R.string.t_weish1), R.drawable.lachgesicht));
        */
        return witze;
    }

das ist mein MainActivity(zumindestens ein Teil davon). Da wird der Liste immer ein Überschriftsstring und ein Textstring eingefügt. Mein Problem, wie mach ich verschiedene Listen also Witz,Spruch und Weisheiten Liste, aber man soll trotzdem zwischen den Listen hin und zurück blättern können. In mein klasse Hauptmenue.class sind die Buttons, die dann in das jeweilige Kapitel springen sollen.
Hier noch die ControllerFragment klasse

Code:
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;
    }
}


Ich hoffe ihr versteht mein Problem und ich bin in diesen Bereich (ArrayList) ein Absoluter neuling
Danke schonmal
 
Die einfachste Variante (sofern sich die Datenmengen in Grenzen halten):

Schreib alles in eine Liste und zähle dabei einfach mit, wie viele Witze, Sprüche und Weisheiten du jeweils hast. Wird der entsprechende Button gedrückt, rechne die Position aus und setze den Index zur Anzeige auf genau diese Position (ähnlich wie beim Blättern - da setzt du die Position ja auch um eins runter oder eins hoch, außer du bist schon an der jeweiligen Grenze, also erster bzw. letzter Eintrag).
 
Thyrion schrieb:
Die einfachste Variante (sofern sich die Datenmengen in Grenzen halten):
Wird der entsprechende Button gedrückt, rechne die Position aus und setze den Index zur Anzeige auf genau diese Position (wie beim Blättern).

Vielen Dank schonmal
Die Idee hab ich auch schon gehabt und hab an den verschiedensten stellen mal versucht die Position zu ändern. Hast du ne Idee wo jetzt bei meinem Code genau?
 
Wenn du deinen Witzen noch eone Variable "Kategorie" oder "Kapitel" mitgibtst kannst du ja immer das erste Element eines Kapitels ansteuern, wenn es eh schon chronologisch in der Arraylist steht.

Was ist denn aus der dopp. verk. Liste geworden die ich dir vorschlug? Dafür kannst du Java's LinkedList API benutzen. LinkedList (Java Platform SE 7 )
Oder deine eigene implementieren.


Sobald du deinen Witzen eine Kategorie gibtst und diese, so wie du vorhast, schon in der richtigen Reihenfolge in der Liste anlegst, dann ist es leicht das erste Element einer Kategorie anzusteuern.

Aber ok egal welche Listen art du nutzt, mit einem Iterator kannst du dann ganz leicht durchgehen.

Bei der LinkedList hättest du jedoch die Möglichkeit die beiden Enden zyklisch zu verbinden so dass das erste Element auf das letzte nach links zeigt und das letzte auf das erste nach rechts zeigt.
 
jaiel
ich hab zwei simple probleme wenn ich das somache wie du das sagst
1. hab ich keine ahnung wie man den verschiedene kategorien zuweist und
2. hab ich kein ahnung wie man die verschiedenen kategorien bei mir ansteuert:confused2::confused2::confused2:
das internet hilft mir irgendwie auch nicht weiter:sad:
aber vielen dank
 
@mwall: Das sind Grundlagen von Java und Objektorientierung.
Du musst doch ein Objekt haben, welches die Texte enthält. Diesem Objekt musst du dann noch eine Eigenschaft geben. Hier die Kategorie.

Die Instanzen dieses Objekts kommen dann in die LinkedList etc.
 
Er benutzt einfach Fragmente dessen Referenzen er in seine Listen füllt.
Mmhhh ok. Du könntest um bei dieser Methode zu bleiben, eine eigene Subclass von Fragment schreiben mit den benötigten Membern.

Wie viel Erfahrung hast du schon in (objektorientiertem) Programmieren gesammelt?
 
In Objektorientierter programmierung fast garnichts:bored:
das hier sollte was neues sein
hab bis jetzt verschiedenste Apps gemacht einfach um android kennenzulernen ohne ernstzunehmende funktion dahinter.
Nur 1 App war ernstzunehmen. Die hat die Zeit, in der der nutzer aktiv Ist ablaufen lassen und als diese abgelauben ist wurde das Handy gesperrt (Kindersicherung):biggrin:

Ich bin aber auch für ganz andere Methoden offen. Hauptsache ich komm zum ziel
 
In Java ist fast alles objektorientiertes Programmieren.

Sagen dir die Begriffe Objekte, Klasse, Member, Methoden , Vererbung, Polymorphie etwas?
(Java Generics? Da du mit Typensicheren Arraylists arbeitest)

Vielleicht ein bisschen was dazu lesen, wenn Bedarf besteht. Dann kannst du uns evtl. besser folgen oder einige Probleme lösen sich von selber. :)

Ein besonders guter Einstieg in Objektorientierung : Rheinwerk Computing :: Java ist auch eine Insel - 3 Klassen und Objekte

Und dann für Datenstrukturen wie deine Witze Sammlung zum Beispiel: Rheinwerk Computing :: Java ist auch eine Insel - 13 Einführung in Datenstrukturen und Algorithmen



PS: Mal ne kleine blöde Frage:

List<Fragment>spruch = new ArrayList();

Ich finde keine Texte darüber wo das beschrieben wird.
Vor igendeiner Version von Java (vllt wars ja 5 oder 6) hat der Compiler das noch nciht akzeptiert da musste man ja explizit nochmal new ArrayList<Fragment>(); schreiben. Nur rein aus Neugier weiß jemand wann das eingeführt wurde? 5,6?
edit: es war 7^^. Get das dann so wie er das macht ohne "ArrayList<>()", also ohne den Diamant operator
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: mwall
Der ein oder andere Begriff sagt mir was aber nicht alle
Ich sehe ich muss noch viel lernen. Hab bis jetzt einfach nur drauf losgeschrieben und bei problemen google gefragt:biggrin:
danke
 

Ähnliche Themen

AnnaBauer21
Antworten
0
Aufrufe
487
AnnaBauer21
AnnaBauer21
AnnaBauer21
Antworten
6
Aufrufe
985
AnnaBauer21
AnnaBauer21
Zurück
Oben Unten