Java [ANDROID] [android.support.v4.view.PagerAdapter] unendlicher PagerAdapter?

  • Ersteller Ersteller Tersus
  • Erstellt am Erstellt am
T

Tersus

Gast
Guten Abend,
kann mir jemand den PagerAdapter, bzw. dessen Methoden auf deutsch erklären?

Code:
public int getCount()
Hier wird die Menge aller Elemente festgelegt. Das verstehe ich noch.

Code:
public Object instantiateItem(ViewGroup container, int position)
  1. Wann wird diese Methode aufgerufen?
  2. Was befindet sich in dem Parameter namens "container" vom Typ ViewGroup?
  3. Was wird hier zurückgegeben und an wen?

Code:
public boolean isViewFromObject(View arg0, Object arg1)
  1. Wann wird diese Methode aufgerufen?
  2. Welchen Sinn hat sie, bzw. wofür wird sie benötigt?

Code:
public void destroyItem(View arg0, int arg1, Object arg2)
  1. Wann wird diese Methode aufgerufen?
  2. Welchen Sinn hat sie, bzw. wofür wird sie benötigt?

Vielen Dank für eine verständnisvolle Erklärung! :)

Ist es möglich einen PagerAdapter zu entwerfen, welcher kein Ende hat? Wo man stets immer weiter blättern kann, egal ob vorwärts oder rückwärts.
 
http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
instantiateItem(Group)
Da erstellst du dein Item und fügst die View (von dem Item) in die ViewGroup ein. (Wie im Link gesagt, du kannst da auch einfach deinen View zurückgeben, dann aber nicht vergessen, die in die Gruppe einzufügen).

isViewFromObject
Der Pager weiß leider nicht, welche View zu welchem Object gehört, daher musst du ihm die Frage beantworten.

destroyItem
View und Object löschen, falls das wichtig sein sollte.

Wann: Völlig egal :), wichtig ist, was du machen sollst.
 
Code:
public Object instantiateItem(ViewGroup container, int position)
Ich füge meine View in die ViewGroup ein? Was für eine ViewGroup ist das? Wo wird sie dargestellt?
Und wenn ich sie bereits der ViewGroup übergebe, wieso muss ich sie dann noch am ende der Methode zurückgeben?

Ein PagerAdapter verwaltet also eigentlich keine Views, sondern Items? Was genau ist mit "Item" gemeint? Daten?
 
Dein Item ist ein Object.
Was das Object kann, ist dein Brot.

http://developer.android.com/reference/android/view/ViewGroup.html
Die ViewGroup "ist" der Pager.

Hier mal meine Implementationsidee für ein Zähler
Code:
class MyPageAdapter extends PagerAdapter{
	static class MyObject{
		int index;
		View v;
		Object very_critical_lock;
		Object very_memory_consuming;
	}
	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 1000;
	}

	@Override
	public boolean isViewFromObject(View arg0, Object arg1) {
		return ((MyObject)arg1).v==arg0;
	}
	@Override
	public
	Object instantiateItem(ViewGroup v, int i){
		MyObject ret=new MyObject();
		ret.index=i;
		ret.v=null;//Left as exercise
		v.addView(ret.v);
		//ret.very_critical_lock.lock();
		//ret.very_memory_consuming.alloc();
		return ret;
	}
	@Override
	public
	void destroyItem(ViewGroup v, int i, Object o){
		MyObject myo=(MyObject)o;
		//myo.very_critical_lock.release();
		//myo.very_memory_consuming.free();
		v.removeView(myo.v);
	}
}
 
Hancock schrieb:
Code:
...
	@Override
	public
	Object instantiateItem(ViewGroup v, int i){
		MyObject ret=new MyObject();
		ret.index=i;
		ret.v=null;//Left as exercise
/* ? */	v.addView(ret.v);
		//ret.very_critical_lock.lock();
		//ret.very_memory_consuming.alloc();
		return ret;
	}
...

Siehe mein Kommentar '?'. Die View in deinem Objekt 'v' verweist auf keine SpeicherID und trotzdem übergibst du sie der ViewGroup, welche diese darstellen soll. Wie kann das funktionieren?


Und noch eine Frage. Wieso müssen wir stets der als Parameter übergebenen ViewGroup, welche der ViewPager ist, immer eine View übergeben?

Vor allem bei einem Array von beispielsweise 10 Views, welche von der Optik her identisch sind. Reicht es nicht, wenn er in diesem Fall nur 3 solcher optisch-identischen Views beinhaltet und diese mit neuem Inhalt recycelt?
 
//Left as an exercise, du solltest da die View schon erzeugen und keine null reinschreiben... :D

Warum die View: Weil der nur Views verarbeiten kann.

Recycling: Du meinst so wie beim der ListView mit den Adaptern? Daran hat der Entwickler wohl nicht gedacht. Oder er wollte es nicht, weil man durch ein Pager ja i.d.R. nicht einfach durchscrollt, daher gibt es ja auch das "manuelle" Speichermanagement mit destroyItem.
 

Ähnliche Themen

Zurück
Oben