Viewpager

  • Antworten:6
Stefan A
  • Forum-Beiträge: 18

12.04.2012, 14:19:00 via Website

Hallo,
ich verwende den Viewpager, um mich "wischend" von Woche zu Woche in einem Kalender zu angeln.
Dies habe ich so gelöst:
1public Object instantiateItem(View collection, int position) {
2
3 LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
4 View page = inflater.inflate(mResId, null);
5
6 ListView lv = (ListView) page.findViewById(R.id.listView1);
7
8 String[] from = new String[]{"Caption"};
9 int[] to = new int[]{R.id.textView1};
10
11
12 ArrayList<HashMap<String, String>> myListing = new ArrayList<HashMap<String, String>>();;
13
14 for (int j=0; j<=5; j++) {
15 HashMap<String, String> item = new HashMap<String, String>();
16 item.put("Caption", "Zeile " + String.valueOf(j));
17
18 myListing.add(item);
19 }
20
21
22 SimpleAdapter adapter = new SimpleAdapter(
23 Viewpager2Activity.this,
24 myListing,
25 R.layout.item,
26 from,
27 to );
28
29
30 lv.setAdapter(adapter);
31
32 ((ViewPager) collection).addView(page, 0);
33
34 return page;
35 }

Wie aus dem Code hervorgeht, hole ich mir bei jeder Instanzierung die Listview und befülle anschließend diese (Die Befüllung der Listview geschieht eigentlich über einen Webservice, ich habe aber aus Beispielgründen einfach eine Map über eine For-Schleife erzeugt). Somit erziele ich den gewünschten Effekt, dass bei jedem "Wischen" die Listview dynamisch neu erzeugt und bestückt wird.
Leider wird beim start der App die instantiateItem Methode 3 Mal automatisch aufgerufen, was darin resultieren würde, dass 3 Mal die aktuelle Woche geladen werden würde. Hat jemand eine Idee wie ich das Problem lösen könnte, bzw. eleganter lösen könnte?

Vielen Dank.
Gruß

Antworten
Markus Gu
  • Forum-Beiträge: 2.644

12.04.2012, 20:51:50 via Website

die methode wird wahrscheinlich 3 mal aufgerufen, weil dein viewpager auch andere seiten vorlädt.

swordiApps Blog - Website

Antworten
Stefan A
  • Forum-Beiträge: 18

12.04.2012, 22:09:53 via Website

Aber hättest du nen Vorschlag, wie ich es bewerkstelligen könnte, dass bei einem Seitenwechsel dynamisch eine Listview angezeigt wird? Ich schaffe es nämlich auch nicht über die onPageChange Methode.

Antworten
Ansgar M
  • Forum-Beiträge: 1.544

12.04.2012, 23:43:32 via App

Hey,
also ich würde, wie ich ja schon mal vorgeschlagen hab, Animationen benutzen. Damit kriegt man ohne Probleme das wischen hin. Allerdings wäre es damit etwas umständlicher es hinzubekommen, dass die View am Finger „klebt”.
Lg Ansgar
P.S. Wenn ich Zeit demnächst mal Zeit finde, könnte ich dir Code von mir hierzu raussuchen, wenn du willst.

Antworten
Stefan A
  • Forum-Beiträge: 18

13.04.2012, 01:08:20 via Website

Das Problem mit den selbstgemachten Animationen ist, dass diese nicht funktionieren wenn man sich über einer Listview befindet. Da dann das Listitem selektiert wird. Oder kann man das anders lösen?

Antworten
Aaron B.
  • Forum-Beiträge: 206

23.04.2014, 10:19:16 via Website

Nicht getestet aber du könntest einen View extends LinearLayout machen, diesen durch setFocusable fokusierbar machen und dann in onTouchEvent den Inhalt des Views mit setTranslationX verschieben. In den View packst du dann mit addView deinen ListView rein. Wenn die Geste in onTouchEvent nicht horizontal ist, kannst du einfach super.onTouchEvent ausführen lassen, dass sollte dann, wenn ich mich nicht irre an deinen ListView weiterleiten.

Falls du beim ViewPager bleiben willst:

Erstelle eine Klasse (z. B. MyListFragment) extends Fragment, in der du dann in onCreateView einen ListView mit deinem Inhalt wiedergibst.

In deiner Activity gibst du an den ViewPager einen FragmentPagerAdapter mit so vielen MyListFragments wie du brauchst. Dann musst du nur noch einen Weg finden, zwischen deinen Fragments und den Listen zu komunizieren und an das entsprechende MyListFragment die entsprechende Liste geben...

LG

Antworten