【问题标题】:Android ViewPager Displaying TextView in LayoutAndroid ViewPager 在布局中显示 TextView
【发布时间】:2012-04-02 05:20:41
【问题描述】:

我正在尝试设置具有多个布局的 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 的正下方,我得到了全屏,但我的所有文本都消失了。这可能是我缺少的一些简单的东西,但任何对此的帮助将不胜感激!

【问题讨论】:

  • 你能解释清楚吗...

标签: android android-layout android-viewpager


【解决方案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) {}
    }
}

【讨论】:

    【解决方案2】:

    我会尝试将您的 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 作为线性布局内的唯一子小部件,它管理整个屏幕。

    【讨论】:

    • 不幸的是,我尝试过实现这一点,但没有成功。当我将它直接嵌套在 LinearLayout 下时,我的两个文本视图都消失了。当我将 Viewpager 放在 textviews 下方时,我会显示 textViews,但如果有意义的话,只有布局的底部会滚动。
    • 是的,我的设置与我的设置类似,当然我的 textViews 除外。我在我的每个 XML 上都有 Viewpager 我假设这就是我需要它的方式?我也在想,我需要在我的 PagerAdapter 中的 LayoutInflater 下添加 textViews 吗?我一直在寻找一些关于如何做到这一点的例子,但没有运气。再次感谢您的任何意见!
    • 我尝试在评论中回复,但还不够长。即将为您发布回复。
    • 太棒了!所以是的,我的问题是我在每个 xml 布局中都设置了 androidViewpager。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    相关资源
    最近更新 更多