View Pager Fehler beim einbinden und benutzen von XML´s

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • View Pager Fehler beim einbinden und benutzen von XML´s

    Hi
    ich habe heute versucht mit diesem Tutorial (blog.stylingandroid.com/archives/537) mehrere Seiten zum verschieben zu machen.
    Jetzt habe ich folgendes XML-Files:

    Das ist der Code vom ViewPager selbst :

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="fill_parent"
    5. android:orientation="vertical" >
    6. <com.viewpagerindicator.TitlePageIndicator
    7. android:id="@+id/indicator"
    8. android:layout_width="fill_parent"
    9. android:layout_height="wrap_content" />
    10. <android.support.v4.view.ViewPager
    11. android:id="@+id/viewpager"
    12. android:layout_width="fill_parent"
    13. android:layout_height="wrap_content"
    14. android:layout_weight="1" />
    15. </LinearLayout>
    Alles anzeigen


    Dann habe ich die Activity die dazu gehört (ViewPagerActivity):

    Java-Quellcode

    1. import android.app.Activity;
    2. import android.os.Bundle;
    3. import android.support.v4.view.ViewPager;
    4. import android.widget.TextView;
    5. import com.viewpagerindicator.TitlePageIndicator;
    6. public class ViewPagerActivity extends Activity {
    7. @Override
    8. public void onCreate(Bundle savedInstanceState) {
    9. super.onCreate(savedInstanceState);
    10. setContentView(R.layout.view_pager_layout);
    11. ViewPagerAdapter Pageadapter = new ViewPagerAdapter( this );
    12. ViewPager pager =
    13. (ViewPager)findViewById( R.id.viewpager );
    14. TitlePageIndicator indicator =
    15. (TitlePageIndicator)findViewById( R.id.indicator );
    16. pager.setAdapter( Pageadapter );
    17. indicator.setViewPager( pager );
    18. }
    19. }
    Alles anzeigen


    Und die Adapteractivity also ViewPagerAdapter:

    Java-Quellcode

    1. import com.viewpagerindicator.*;
    2. import android.content.Context;
    3. import android.os.Parcelable;
    4. import android.support.v4.view.PagerAdapter;
    5. import android.support.v4.view.ViewPager;
    6. import android.view.LayoutInflater;
    7. import android.view.View;
    8. import android.widget.TextView;
    9. public class ViewPagerAdapter extends PagerAdapter
    10. implements TitleProvider
    11. {
    12. private static String[] titles = new String[]
    13. {
    14. "Page 1",
    15. "Page 2"
    16. };
    17. private final Context context;
    18. public ViewPagerAdapter( Context context )
    19. {
    20. this.context = context;
    21. }
    22. public String getTitle( int position )
    23. {
    24. return titles[ position ];
    25. }
    26. @Override
    27. public int getCount()
    28. {
    29. return titles.length;
    30. }
    31. @Override
    32. public Object instantiateItem( View pager, int position )
    33. {
    34. LayoutInflater inflater = (LayoutInflater) pager.getContext()
    35. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    36. int resId = 0;
    37. switch (position) {
    38. case 0:
    39. resId = R.layout.listlitermanager;
    40. break;
    41. case 1:
    42. resId = R.layout.listkostenmanager;
    43. break;
    44. }
    45. View view = inflater.inflate(resId, null);
    46. ((ViewPager) pager).addView(view, 0);
    47. return view;
    48. }
    49. @Override
    50. public void destroyItem(View arg0, int arg1, Object arg2) {
    51. ((ViewPager) arg0).removeView((View) arg2);
    52. }
    53. @Override
    54. public boolean isViewFromObject( View view, Object object )
    55. {
    56. return view.equals( object );
    57. }
    58. @Override
    59. public void finishUpdate( View view ) {}
    60. @Override
    61. public void restoreState( Parcelable p, ClassLoader c ) {}
    62. @Override
    63. public Parcelable saveState() {
    64. return null;
    65. }
    66. @Override
    67. public void startUpdate( View view ) {}
    68. }
    Alles anzeigen


    Und jetzt habe ich moch die beiden Layoutdateien, welche auch im Adapter über public Object instantiateItem aufgerufen werden:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="fill_parent">
    5. <TextView
    6. android:id="@+id/txtViewListKostenmanager"
    7. android:layout_width="fill_parent"
    8. android:layout_height="wrap_content"
    9. android:layout_alignParentBottom="true"
    10. android:text="@string/txt_listkostenmanager_no_text"
    11. android:textAppearance="?android:attr/textAppearanceLarge"
    12. android:padding="10dip"
    13. android:textSize="25sp"
    14. >
    15. </TextView>
    16. <ListView
    17. android:id="@+id/android:list"
    18. android:layout_width="fill_parent"
    19. android:layout_height="fill_parent"
    20. android:layout_above="@id/txtViewListKostenmanager"
    21. android:layout_below="@+id/sp_listkostenmanager_auswahl" >
    22. </ListView>
    23. </RelativeLayout>
    Alles anzeigen


    Und:

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="fill_parent"
    4. android:layout_height="fill_parent">
    5. <TextView
    6. android:id="@+id/txtViewListKostenmanager"
    7. android:layout_width="fill_parent"
    8. android:layout_height="wrap_content"
    9. android:layout_alignParentBottom="true"
    10. android:text="@string/txt_listkostenmanager_no_text"
    11. android:textAppearance="?android:attr/textAppearanceLarge"
    12. android:padding="10dip"
    13. android:textSize="25sp"
    14. >
    15. </TextView>
    16. <ListView
    17. android:id="@+id/android:list"
    18. android:layout_width="fill_parent"
    19. android:layout_height="fill_parent"
    20. android:layout_above="@id/txtViewListKostenmanager"
    21. android:layout_below="@+id/sp_listkostenmanager_auswahl" >
    22. </ListView>
    23. </RelativeLayout>
    Alles anzeigen


    Das klappt auch alles super. Ich kann die ViewPagerActivity ganz normal aufrufen und bekomme dann eine Seite angezeigt, wo ich oben diese Leiste sehen kann und auf dem Bildschirm kann ich das dann alles super hin und her schieben.
    Jetzt will ich aber die ListViews in den letzten beiden Layoutdateien füllen, eben so wie die TextViews. Wenn ich jetzt aber in der ViewPagerActivity ganz oben ein TextView über die Klasse R anspreche und dann mit setText einen Text setzten will, dann geht das nicht. Der gibt mir einen Laufzeitfehler aus. Wie kann ich denn jetzt auf die TextViews und ListViews in den beiden untersten Layouts zugreifen?

    Ich habe schon sau viel gegoogle aber leider keine Antwort auf meine Frage gefunden :(

    Vielen Dank schon mal!
    LG
    Marco
  • Hallo Marco,

    kannst du mal gucken, was bei dem Laufzeitfehler genau rauskommt?

    Mich interessieren die Fehlermeldungen - bitte erst einmal den LogCat löschen und dann die App neu starten, dann ist nicht so viel altes Zeug dabei.

    Du kannst die Einträge im LogCat markieren und dann mit dem Disketten-Symbol exportieren. ;)
    Das Leben kann so hart sein, man muss nur richtig wollen!!!
  • Hey :)

    wenn ich jetzt für die ViewPagerActivity folgenden Code nehme:

    Java-Quellcode

    1. package com.marcodeubel.kostenmanager;
    2. import android.app.Activity;
    3. import android.content.Context;
    4. import android.os.Bundle;
    5. import android.support.v4.view.ViewPager;
    6. import android.view.LayoutInflater;
    7. import android.view.View;
    8. import android.widget.TextView;
    9. import com.viewpagerindicator.TitlePageIndicator;
    10. public class ViewPagerActivity extends Activity {
    11. @Override
    12. public void onCreate(Bundle savedInstanceState) {
    13. super.onCreate(savedInstanceState);
    14. setContentView(R.layout.view_pager_layout);
    15. ViewPagerAdapter Pageadapter = new ViewPagerAdapter( this );
    16. ViewPager pager =
    17. (ViewPager)findViewById( R.id.viewpager );
    18. TitlePageIndicator indicator =
    19. (TitlePageIndicator)findViewById( R.id.indicator );
    20. pager.setAdapter( Pageadapter );
    21. indicator.setViewPager( pager );
    22. TextView test = (TextView) findViewById(R.id.txt_listlitermanager_gesamt);
    23. test.setText("Test");
    24. }
    25. }
    Alles anzeigen



    Dann kommt dieser Fehler:

    Quellcode

    1. 02-22 02:01:47.651: D/AndroidRuntime(2017): Shutting down VM
    2. 02-22 02:01:47.651: W/dalvikvm(2017): threadid=1: thread exiting with uncaught exception (group=0x40015560)
    3. 02-22 02:01:47.671: E/AndroidRuntime(2017): FATAL EXCEPTION: main
    4. 02-22 02:01:47.671: E/AndroidRuntime(2017): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.marcodeubel.kostenmanager/com.marcodeubel.kostenmanager.ViewPagerActivity}: java.lang.NullPointerException
    5. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
    6. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
    7. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
    8. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
    9. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.os.Handler.dispatchMessage(Handler.java:99)
    10. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.os.Looper.loop(Looper.java:123)
    11. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread.main(ActivityThread.java:3683)
    12. 02-22 02:01:47.671: E/AndroidRuntime(2017): at java.lang.reflect.Method.invokeNative(Native Method)
    13. 02-22 02:01:47.671: E/AndroidRuntime(2017): at java.lang.reflect.Method.invoke(Method.java:507)
    14. 02-22 02:01:47.671: E/AndroidRuntime(2017): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    15. 02-22 02:01:47.671: E/AndroidRuntime(2017): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    16. 02-22 02:01:47.671: E/AndroidRuntime(2017): at dalvik.system.NativeStart.main(Native Method)
    17. 02-22 02:01:47.671: E/AndroidRuntime(2017): Caused by: java.lang.NullPointerException
    18. 02-22 02:01:47.671: E/AndroidRuntime(2017): at com.marcodeubel.kostenmanager.ViewPagerActivity.onCreate(ViewPagerActivity.java:28)
    19. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    20. 02-22 02:01:47.671: E/AndroidRuntime(2017): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
    21. 02-22 02:01:47.671: E/AndroidRuntime(2017): ... 11 more
    Alles anzeigen


    Ich habe ja für die zwei XML Files welche ich anzeigen will auch zwei Activitys, welche von ListActivity erben. Kann ich nicht die irgendwie verknüpfen, sodass die gleich mit den zwei Layouts geladen werden oder so?
  • Die Fehlermeldung deutet auf Zeile 28 - das wäre, wenn dein Code die richtigen Zeilennummern zeigt, das Objekt "test".

    Hast du in der letzten Zeit an den IDs in deinen Layouts was verändert/ergänzt?

    Bitte einmal zur Sicherheit die Manifest-Datei speichern (ein Leerzeichen zufügen, damit auch bestimmt gespeichert wird) und nochmal probieren.
    Das Leben kann so hart sein, man muss nur richtig wollen!!!
  • Also die Id stimmt habe ich eben geschaut.
    Die Manifest-Datei habe ich noch mal gespeichert, da hat sich auch nichts geändert.
    Kann nicht mal jemand einen Beispielcode poste, wo in dem ViewPagerAdapter in der Methode instantiateItem ein Layout mit einer ListView oder einem Button oder was auch immer hinzugefügt wird, und dann damit gearbeitet wird?

    Ich habe echt keine Idee wie das gehen soll ^^

    Kann ich evt. irgendwie einfach die beiden Activitys die ich schon habe, welche eigentlich für die Layouts gewesen sind verweisen irgendwie im ViewPagerAdapter oder in der ViewPagerActivity?
  • Danke schon mal für die Bemühungen :)

    Ich denke mal, dass man bei ViewPager mit Fragmenten arbeiten muss.
    Weiß jemand genaueres zu Fragmenten oder kennt jemand ein Tutorial dazu. Wäre super :)
    Wie arbeitet man mit denen und so weiter...

    LG
    Marco