Multi Listview auf ein Fragment setzen.

  • Antworten:7
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 9

10.05.2015, 20:39:56 via Website

Hallo,

ich möchte gerne eine Listview in diesem Stil erstellen.

image

Ich habe das auch mittels einer Activty irgendwie hinbekommen. Ich möchte aber so vorgehen:
Es gibt eine MainActivity. Es gibt verschiedene Menüpunkte in meine App. Jeder Menüpunkt hat keine Activity. Es werden Fragments verwendet.

Mein Problem ist nun, dass ich eine Multi Listview in das Fragment setzen will.

 public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_pages, container, false);

    return rootView;
}

Wie kann ich einen BaseAdapter auf dieses Fragment setzen?
Hoffe ich habe das einigermassen verständlich erklärt was ich vorhabe.
Sonst bitte Fragen...

Vielen Dank
HansPeter

— geändert am 10.05.2015, 21:18:25

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

10.05.2015, 20:59:35 via App

Hallo HansPeter,

Herzlich willkommen bei uns im Forum :)

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)


Du musst einfach den Code für die MultiListView aus der Activity ins Frsgment übertragen. Falls du damit schwierigkeiten hast, poste hier mal den Code

LG

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

10.05.2015, 22:43:49 via Website

Hallo Pascal,

vielen Dank für den Hinweis und Dein Hilfsangebot.

Ich habe jetzt folgenden Code:

 import android.app.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;

public class FindPeopleFragment extends Fragment {

public FindPeopleFragment(){}


public class codeLeanChapter {
    String chapterName;
    String chapterDescription;
}
CodeLearnAdapter chapterListAdapter;


public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);


    //setContentView(R.layout.fragment_find_people);
    chapterListAdapter = new CodeLearnAdapter();
    ListView codeLearnLessons = (ListView)rootView.findViewById(R.id.listView1);
    codeLearnLessons.setAdapter(chapterListAdapter);

    return rootView;

}


public class CodeLearnAdapter extends BaseAdapter {

    List<codeLeanChapter> codeLeanChapterList = getDataForListView();
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return codeLeanChapterList.size();
    }

    @Override
    public codeLeanChapter getItem(int arg0) {
        // TODO Auto-generated method stub
        return codeLeanChapterList.get(arg0);
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {


        /*if(arg1==null)


        {
            LayoutInflater inflater = (LayoutInflater) FindPeopleFragment.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            arg1 = inflater.inflate(R.layout.spieltag_list_item, arg2,false);
        }

        */

        TextView chapterName = (TextView)arg1.findViewById(R.id.textView1);
        TextView chapterDesc = (TextView)arg1.findViewById(R.id.textView2);

        codeLeanChapter chapter = codeLeanChapterList.get(arg0);

        chapterName.setText(chapter.chapterName);
        chapterDesc.setText(chapter.chapterDescription);

        return arg1;
    }

    public codeLeanChapter getCodeLearnChapter(int position)
    {
        return codeLeanChapterList.get(position);
    }

}



public List<codeLeanChapter> getDataForListView()
{
    List<codeLeanChapter> codeLeanChaptersList = new ArrayList<codeLeanChapter>();

    for(int i=0;i<16;i++)
    {

        codeLeanChapter chapter = new codeLeanChapter();
        chapter.chapterName = "Chapter "+i;
        chapter.chapterDescription = "This is description for chapter "+i;
        codeLeanChaptersList.add(chapter);
    }

    return codeLeanChaptersList;

}

}

Das ist recht zusammen geflickt, aber als reines Activity hat es funktioniert. Ich möchte das aber wie gesagt als Fragment einbinden.
Aber da fehlt mir als Newbie das Wissen. Und die Doku hilft mir nicht weiter.

— geändert am 10.05.2015, 22:46:09

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

10.05.2015, 23:24:52 via Website

Ok, das Fragment passt soweit, der Code sieht ok aus.

Jetzt musst du das ganz in deine Activity einbinden:

Am besten du nutzt eine FragmentAytivity, d.h. Klassendefinition:

class MyActivity extends FragementActivity{...}

BSP. zum anzeigen: (R.id.your_placehodler ist ein Layout in deiner XML in der du den Inhalt des Fragments anzeigen willst.)

FragmentManager fm = getFragmentManager();
      FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.your_placehodler, new YourFragment());
    // alternatively add it with a tag
    // trx.add(R.id.your_placehodler, new YourFragment(), "detail");
    ft.commit();

Bei weiterem Interesse: http://www.vogella.com/tutorials/AndroidFragments/article.html

— geändert am 11.05.2015, 16:23:03

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

11.05.2015, 16:13:54 via Website

Danke für die Hilfsbereitschaft.

Ich muss nur noch mal zum Verständnis nachfragen bzw. meinen Zustand darstellen.

Es gibt eine Klasse MainActivity. Hier ist ein Menü und ein ClickListener vorhanden.
Wird ein Menüpunkt ausgewählt, wird ein Fragment erzeugt. In meinem Fall
ein "new FindPeopleFragment". Ich befinde mich also immer in dem gleichen Activity und tausche nur
das entsprechende Fragment aus.
Mit dem obrigen Code bekomme ich beim Aufruf des Menüpunkt einen Fehler.

Was ich eigentlich versuchen will ist ein Fragment, in dem ein weiteres Fragment (Die MultilistView) steckt.
Bin ich da auf dem richtigen Weg? Ich bin ein wenig verwirrt über den Hinweis "FragentActivity".

Gruß
Hans-Peter

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.177

11.05.2015, 16:26:59 via Website

zu 1. Richtig du tauscht nur die Fragments gegeneinander aus.

zu 2. Meinst du geschachtelte Fragments? Also ein Fragment indem ein anderes ist? Das ist etwas komplizierter aber doch möglich. Ich würde erstmal alles ohne geschachteltes machen also as letzte Fragment gegen das mit der listView austauschen.

Und der Hinweis muss FragmentActivity heißen, ist ein Tippfehler ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
  • Forum-Beiträge: 9

14.05.2015, 20:35:12 via Website

Hi,
ich kapier das Alles nicht wirklich.
Vielleicht muss ich das Step by Step machen.
Folgender Code funktioniert:

import android.app.Fragment;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;

public class FindPeopleFragment extends Fragment {

public FindPeopleFragment() {
}

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);

    ArrayList<String> meineDaten = new ArrayList<String>();
    meineDaten.add("FC Bayern München");
    meineDaten.add("FC Barcelona");
    meineDaten.add("Manchester United");


    ArrayAdapter<String> test = new ArrayAdapter<String>(
            getActivity(),
            R.layout.fragment_find_people,
            R.id.textview,
            meineDaten); 


    ListView vorhersageListView = (ListView) rootView.findViewById(R.id.listPeople);
    vorhersageListView.setAdapter(test);

    return rootView;

}

}

Was muss ich tun um jetzt eine Multilist Anzeige zu bewerkstelligen? Also zum Beispiel zu dem Verein noch die entsprechende Liga hinzuzufügen?

Antworten

Empfohlene Artikel