Android ViewPager在布局中显示TextView

时间:2012-04-02 05:20:42

标签: android android-layout android-viewpager

我正在尝试设置一个ViewPager,其中包含多个布局,每个布局中包含2个TextView。当我运行我的应用程序时,我无法正常显示TextViews。我的寻呼机工作正常,但它没有显示我在XML布局中的Textviews。

这是我在PageAdapter中的代码

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;

这就是我对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>

我尝试将我的XML布局移动到我的LinearLayout正下方,然后我得到全屏,但我的所有文字都消失了。这可能是我想念的简单内容,但对此的任何帮助都将非常感激!

2 个答案:

答案 0 :(得分:1)

我会尝试将ViewPager放在textViews上方,直接嵌套在LinearLayout下面。对不起,我不能提供更多帮助 - 我使用ViewPager的经验与TabAdapter / actionBar标签一起使用。

这是我的寻呼机的代码:

<?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>

我界面的所有其余部分都来自其他标签,因此这是我的main.xml的全部内容。基本上我发布这个说我已经将我的viewpager作为线性布局中唯一的子窗口小部件,它管理整个屏幕。

答案 1 :(得分:1)

您只需要一个ViewPager。我的应用有9个片段和一个活动。 viewpager在main.xml中声明一次。以下是重要代码的含义:

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);

这是我的主要课程。您将失去我从未真正直接使用整个main.xml:内容视图设置为ViewPager而不是布局。然后,在我的主要活动中,我有一个内部类,它左/右处理ViewPager,以及我的actionBar选项卡的管理。但这听起来并不像你使用标签,所以下一段代码可能没那么有用:

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) {}
    }
}