ViewPager mit Seitenauswahl - Actionbar ?

  • 1 Antworten
  • Letztes Antwortdatum
M

Manuel1805

Ambitioniertes Mitglied
2
Hallo zusammen,

ich stehe mal wieder vor einem kleinen Problem. Vielleicht hat ja der Ein oder Andere eine gute Idee. In meiner (Tutorial-)App verwende ich einen Navigationsdrawer zum Auswählen einzelner Kapitel. Die Inhalte der einzelnen Kapitel stelle ich mit einem ViewPager dar. Da die Anzahl der vorhandenen Seiten im Viewpager eine so große Dimension eingenommen hat, möchte ich eine Unterkapitelauswahl einbauen. Ich dachte an die Actionbar, o.ä. Kann mir jemand sagen, wie ich diese entsprechend meiner Auswahl im Navigationsdrawer befülle. Oder eine andere Idee liefern.



Mein Navigationsdrawer schaut wie folgt aus:

Code:
public class MainActivity extends Activity {

	private DrawerLayout mDrawerLayout;
	private ListView mDrawerList;
	private ActionBarDrawerToggle mDrawerToggle;

	private CharSequence mDrawerTitle;
	private CharSequence mTitle;
	CustomDrawerAdapter adapter;

	List<DrawerItem> dataList;

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

		// Initializing
		dataList = new ArrayList<DrawerItem>();
		mTitle = mDrawerTitle = getTitle();
		mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
		mDrawerList = (ListView) findViewById(R.id.left_drawer);

		mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
				GravityCompat.START);

		// Add Drawer Item to dataList
		dataList.add(new DrawerItem("Startseite", R.drawable.ic_start)); //1
		//dataList.add(new DrawerItem("zuletzt besuchte Seite",
		//		R.drawable.ic_action_good));
		dataList.add(new DrawerItem("Grundlagen", //2
				R.drawable.ic_sinn_und_zweck));
		
              ... etc...


		adapter = new CustomDrawerAdapter(this, R.layout.custom_drawer_item,
				dataList);

		mDrawerList.setAdapter(adapter);

		mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

		getActionBar().setDisplayHomeAsUpEnabled(true);
		getActionBar().setHomeButtonEnabled(true);

		mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
				R.drawable.ic_drawer, R.string.drawer_open,
				R.string.drawer_close) {
			public void onDrawerClosed(View view) {
				getActionBar().setTitle(mTitle);

				invalidateOptionsMenu(); // creates call to
											// onPrepareOptionsMenu()
			}

			public void onDrawerOpened(View drawerView) {

				getActionBar().setTitle(mDrawerTitle);
				invalidateOptionsMenu(); // creates call to
											// onPrepareOptionsMenu()
				
			}
		};

		mDrawerLayout.setDrawerListener(mDrawerToggle);
		/*
		 if (savedInstanceState == null) { SelectItem(0); }
		*/ 
		
		if (savedInstanceState != null) {
			return;

		} else {
			SelectItem(0);
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	public void SelectItem(int possition) {

		Fragment fragment = null;

		switch (possition) {
		case 0:
			fragment = new FragmentStartSeite();

			break;

		case 1:
			fragment = new Sinn();
			
			break;

		case 2:
			fragment = new Einstieg();

			break;

		  ... etc ...
		 
		 
		}

		// fragment.setArguments(args);
		FragmentManager frgManager = getFragmentManager();
		frgManager.beginTransaction().replace(R.id.content_frame, fragment)
				.commit();

		mDrawerList.setItemChecked(possition, true);
		setTitle(dataList.get(possition).getItemName()); //Kapitel als Titel anzeigen
		mDrawerLayout.closeDrawer(mDrawerList);

	}

	@Override
	public void setTitle(CharSequence title) {
		mTitle = title;
		getActionBar().setTitle(mTitle);
	}

	}

Der Code meines ViewPagers schaut wie folgt aus:

Code:
public class Sinn extends Fragment {

	public Sinn() {

	}

	ViewPager viewPager;

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

		View view = inflater.inflate(R.layout.start_kapitel, container, false);

		// ViewPager initialisieren
		SinnPageAdapter adapter = new SinnPageAdapter(this.getActivity());
		viewPager = (ViewPager) view.findViewById(R.id.viewPager);
		viewPager.setAdapter(adapter);
		// starte mit erstem Layout
		viewPager.setCurrentItem(0);

		return view;

	}

Den ViewPager befülle ich wie folgt:

Code:
public class SinnPageAdapter extends PagerAdapter {

	Context context;

	public SinnPageAdapter(Context context) {
		this.context = context;
	}

	// Punkte für Fragen 1 -6
	public int punkte[] = new int[7];

	public void punkteVergeben(int Aufgabe, int Punkt) {
		this.punkte[Aufgabe] = Punkt;

	}

	TextView titel;
	TextView titelInhalt;
	TextView inhalt;
	TextView seite_von_bis;
	ImageView bild;
	ImageView imagePfeilrechts;
	CharSequence titelInhalttext; // für XML Titel_Inhalt
	CharSequence inhaltText; // für XML Inhalt

	public int seite;
	int maxSeitenzahl = 30;
	TextView frage;

	


	// ---Die Anzahl aller Seiten zurückgeben---
	// 11 Seiten + 4 Übungen
	public int getCount() {
		return 40;
	}

	public Object instantiateItem(View collection, int position) {

		LayoutInflater inflater = (LayoutInflater) collection.getContext()
				.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

		int resId = 0;
		switch (position) {
		case 0:
			resId = R.layout.a_titel_inhalt;
			seite = 1;
			break;
		case 1:
			resId = R.layout.a_titel_inhalt;
			seite = 2;
			break;
		
               ...etc...
		}

		View view = inflater.inflate(resId, null);

		if (seite == 1) {
			titel = (TextView) view.findViewById(R.id.a_ti_titel);
			titel.setText("Grundlagen");

			titelInhalt = (TextView) view.findViewById(R.id.a_ti_inhalt);
			titelInhalttext = Html
					.fromHtml("In dieser Lektion lernst Du"
							+ " die ersten Grundbegriffe und Aufgaben der Buchführung kennen. "
							+ "Die folgenden Themen schauen wir uns nun an."
							+ "<br/>" + "<br/>1. Überblick" + "<br/>2. Bilanz"
							+ "<br/>3. Inventur / Inventar" + "<br/>4. GoB"
							+ "<br/>5. Bewertungsgrundsätze"
							+ "<br/>6. Buchführungspflicht");

			titelInhalt.setText(titelInhalttext);

		}
 
Einen Lösungsansatz habe ich, allerdings weiß ich nicht wie ich die Lösung umsetzen kann...:confused2::drool:

Kann mir jemand sagen wie ich in der Klasse "SinnPageAdapter"
auf das Objekt "viewPager" der Klasse Sinn" zugreifen kann??

Wenn ich hierauf Zugriff habe, sollte ich mit viewPager.setcurrentItem(Itemnummer) die gewünschte Seite aufrufen können.


Code:
public class Sinn extends Fragment {

	public Sinn() {

	}

	ViewPager viewPager;

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

		View view = inflater.inflate(R.layout.start_kapitel, container, false);

		// ViewPager initialisieren
		SinnPageAdapter adapter = new SinnPageAdapter(this.getActivity());
		viewPager = (ViewPager) view.findViewById(R.id.viewPager);
		viewPager.setAdapter(adapter);
		// starte mit erstem Layout
		viewPager.setCurrentItem(0);

		return view;

	}

Code:
public class SinnPageAdapter extends PagerAdapter {

	Context context;

	public SinnPageAdapter(Context context) {
		this.context = context;
	}

	// Punkte für Fragen 1 -6
	public int punkte[] = new int[7];

	public void punkteVergeben(int Aufgabe, int Punkt) {
		this.punkte[Aufgabe] = Punkt;

	}

	TextView titel;
	TextView titelInhalt;
	TextView inhalt;
	TextView seite_von_bis;
	ImageView bild;
	ImageView imagePfeilrechts;
	CharSequence titelInhalttext; // für XML Titel_Inhalt
	CharSequence inhaltText; // für XML Inhalt

	public int seite;
	int maxSeitenzahl = 30;
	TextView frage;
 
Zurück
Oben Unten