2012-04-02 20 views
1

Ich versuche, einen ViewPager mit einer Anzahl von Layouts mit 2 TextViews in jedem Layout einzurichten. Ich habe Probleme, meine TextViews korrekt anzuzeigen, wenn ich meine App starte. Mein Pager funktioniert gut, aber die Textansichten, die ich in meinem XML-Layout habe, werden nicht angezeigt.Android ViewPager Anzeigen von TextView in Layout

Hier ist mein Code, den ich in meinem Pageadapter haben

public class MyPageAdapter extends PagerAdapter { 

public int getCount() { 
    return 31; 
} 

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.main_menu; 

      break; 
     case 1: 
      resId = R.layout.article1; 

      break; 
     case 2: 
      resId = R.layout.article2; 

      break; 
     .... 
     .... 

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

    ((ViewPager) collection).addView(view, 0); 

    return view; 

Dies ist, was ich für meine XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" android:background="@drawable/background"      android:clickable="true" 
android:id="@+id/layout13" 
android:weightSum="0"> 

<TextView 
    android:id="@+id/textView01" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:gravity="center_vertical|center_horizontal" 
    android:padding="12dp" 
    android:text="@string/article13" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#000000" /> 

<TextView 
    android:id="@+id/textView02" 
    android:layout_width="match_parent" 
    android:layout_height="302dp" 
    android:gravity="center_vertical|center_horizontal" 
    android:text="@string/body13" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="#000000" /> 



<android.support.v4.view.ViewPager 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@id/viewPager" > 

</android.support.v4.view.ViewPager> 

</LinearLayout> 

Ich habe versucht, Verschieben des um in meinem XML-Layout nach rechts unten haben Mein LinearLayout und ich bekomme den ganzen Bildschirm, aber alle meine Texte verschwinden. Es ist wahrscheinlich etwas Einfaches, das ich vermisse, aber jede Hilfe dazu würde sehr geschätzt werden!

+0

können Sie es eindeutig erklären ... –

Antwort

1

Sie benötigen nur einen ViewPager. Meine App hat 9 Fragmente und eine Aktivität. Der Viewpager wird einmal in main.xml deklariert. So sieht der wichtige Code aus:

public class Polling extends SherlockFragmentActivity implements OnMenuItemClickListener { 
    private ViewPager mViewPager; 
    private TabsAdapter mTabsAdapter; 

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mViewPager = new ViewPager(this); 
     mViewPager.setId(R.id.pager); 
     setContentView(mViewPager); 

    //here's the code that makes a tab, adds it to the actionbar, adds a tabadapter, and coordinates the viewpager: 

bar = getSupportActionBar(); 
     bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
     bar.setDisplayShowTitleEnabled(false); 
     bar.setDisplayShowHomeEnabled(false); 
     mTabsAdapter = new TabsAdapter(this, mViewPager); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.login), 
       LoginFragment.class, null); 
     mTabsAdapter.addTab(bar.newTab().setText(R.string.economics), 
       EconFragment.class, null); 

Das ist also meine Hauptklasse. Sie werden verlieren, ich benutze nie die gesamte main.xml direkt: die Inhaltsansicht wird auf den ViewPager anstatt auf ein Layout gesetzt. Dann habe ich innerhalb meiner Hauptaktivität eine innere Klasse, die den ViewPager nach links/rechts steuert, sowie die Verwaltung meiner actionBar-Registerkarten. Aber es klingt nicht wie Sie Registerkarten verwenden, so das nächste Stück Code kann nicht sein, dass hilfreich:

public static class TabsAdapter extends FragmentPagerAdapter 
    implements ActionBar.TabListener, ViewPager.OnPageChangeListener { 
     private final Context mContext; 
     private final ActionBar mActionBar; 
     private final ViewPager mViewPager; 
     private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); 

     static final class TabInfo { 
      private final Class<?> clss; 
      private final Bundle args; 

      TabInfo(Class<?> _class, Bundle _args) { 
       clss = _class; 
       args = _args; 
      } 
     } 

     public TabsAdapter(SherlockFragmentActivity activity, ViewPager pager) { 
      super(activity.getSupportFragmentManager()); 
      mContext = activity; 
      mActionBar = activity.getSupportActionBar(); 
      mViewPager = pager; 
      mViewPager.setAdapter(this); 
      mViewPager.setOnPageChangeListener(this); 
     } 

     public void addTab(ActionBar.Tab tab, Class<?> clss, Bundle args) { 
      TabInfo info = new TabInfo(clss, args); 
      tab.setTag(info); 
      tab.setTabListener(this); 
      mTabs.add(info); 
      mActionBar.addTab(tab); 
      notifyDataSetChanged(); 
     } 

     public int getCount() { 
      return mTabs.size(); 
     } 

     public SherlockFragment getItem(int position) { 
      TabInfo info = mTabs.get(position); 
      return (SherlockFragment)Fragment.instantiate(mContext, info.clss.getName(), info.args); 
     } 

     public void onPageSelected(int position) { 
      mActionBar.setSelectedNavigationItem(position); 
     } 
     public void onPageScrollStateChanged(int state) {} 
     public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} 

     public void onTabSelected(Tab tab, FragmentTransaction ft) { 
      mViewPager.setCurrentItem(tab.getPosition()); 
      //Log.v(TAG, "clicked"); 
      Object tag = tab.getTag(); 
      for (int i=0; i<mTabs.size(); i++) { 
       if (mTabs.get(i) == tag) { 
        mViewPager.setCurrentItem(i); 
       } 
      } 
     } 
     public void onTabUnselected(Tab tab, FragmentTransaction ft) {} 
     public void onTabReselected(Tab tab, FragmentTransaction ft) {} 
     public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {} 
     public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {} 
    } 
} 
1

Ich würde versuchen, Ihren ViewPager oberhalb der textViews zu platzieren, die direkt unter dem LinearLayout verschachtelt sind. Es tut mir leid, dass ich nicht mehr helfen kann - meine Erfahrung mit ViewPager war neben TabAdapter/actionBar Tabs.

Hier ist der Code auf meinem Pager:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     /> 

</LinearLayout> 

Der ganze Rest meiner Schnittstelle von anderen Registerkarten kommt, so ist dies die Gesamtheit meiner main.xml. Im Grunde poste ich das, um zu sagen, dass ich meinen Viewpager als das einzige Kind-Widget innerhalb eines linearen Layouts habe und es den gesamten Bildschirm verwaltet.

+0

Ich habe versucht, dies leider ohne Erfolg umzusetzen. Wenn ich es direkt unter dem LinearLayout neste, verschwinden beide Textansichten. Wenn ich den Viewpager unter die Textansichten stelle, bekomme ich die textViews zu sehen, aber nur der untere Teil meines Layouts scrollt, wenn das Sinn macht. – Ammonious

+0

mein ursprünglicher Beitrag bearbeitet – Davek804

+0

Ja, ich habe meine ähnlich eingerichtet, mit Ausnahme von meinem TextViews. Ich habe den Viewpager auf jedem meiner XMLs, ich nehme an, dass ich es so haben muss? Auch ich dachte, muss ich die TextViews unter meinem LayoutInflate innerhalb meines PagerAdapter hinzufügen? Ich habe nach einigen Beispielen dafür gesucht, wie dies geschehen würde, aber ich hatte kein Glück. Nochmals vielen Dank für die Eingabe! – Ammonious

Verwandte Themen