【问题标题】:ViewPagerIndicator doesn't show titlesViewPagerIndicator 不显示标题
【发布时间】:2013-06-18 10:18:54
【问题描述】:

我想使用 ViewPagerIndicator 在我的应用程序中的片段中导航。我已成功导入库并实现了 TitlePageIndicator。到目前为止,当我启动应用程序时没有任何异常,我也看到了指示器,但没有任何页面名称。这是我的代码

viewpager_layout.xml

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

 <com.viewpagerindicator.TitlePageIndicator
    android:id="@+id/titles"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"/>

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

</LinearLayout>

搜索活动

public class SearchActivity extends FragmentActivity 
implements Tab1Fragment.OnHeadlineSelectedListener, Tab2Fragment.OnHeadlineSelectedListener 
{

private MyPagerAdapter mPagerAdapter; 

@Override
protected void onCreate(Bundle savedInstanceState) {
    //getApplicationContext().deleteDatabase("db");

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.viewpager_layout);

    UserID.getInstance().createUserID(this);

    this.initialisePaging(); //initialsie the pager
    invalidateOptionsMenu();

}

private void initialisePaging() {

    List<Fragment> fragments = new Vector<Fragment>();
    fragments.add(Fragment.instantiate(this, Tab1Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab2Fragment.class.getName()));
    fragments.add(Fragment.instantiate(this, Tab3Fragment.class.getName()));
    this.mPagerAdapter  = new MyPagerAdapter(getSupportFragmentManager(), fragments);


    ViewPager pager = (ViewPager)findViewById(R.id.viewpager);
    pager.setAdapter(mPagerAdapter);

    TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.titles);
    titleIndicator.setViewPager(pager);
}
}

MyPagerAdapter

package com.easyimmoandroid.myPager;

import java.util.List;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyPagerAdapter extends FragmentPagerAdapter {

private static final String[] TITLES = new String[] { "Title 1", "Title 2",  "Title 3" };

private List<Fragment> fragments;

public MyPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
    super(fm);
    this.fragments = fragments;
}

@Override
public Fragment getItem(int pos) {
    return this.fragments.get(pos);
}

@Override
public int getCount() {
    return this.fragments.size();
}

@Override
public CharSequence getPageTitle(int position) {
    return TITLES[position];
}

}

片段

package com.easyimmoandroid.fragments;

public class Tab1Fragment extends Fragment {

private ScrollView mScrollView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    if (container == null) {
        return null;
    }

    // FRAGMENT LAYOUT
    mScrollView = (ScrollView) inflater.inflate(R.layout.tab_frag1_layout,
            container, false);
...

return mScrollView;
}

感谢您的帮助

由于这仍然不起作用,如果除了 WiewPagerIndicator 之外还有其他解决方案可以做到这一点,我会请你建议我。

【问题讨论】:

  • super.setContentView(R.layout.viewpager_layout);你可以删除超级
  • @amer.salkovic +1 给 Raghunandan 和 ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager);-这是什么意思?
  • 我正在使用这个thepseudocoder.wordpress.com/2011/10/05/… 教程来进行片段和滑动。我在那里找到了它。我认为该活动应该托管 viewpager_layout ,这是应该如何完成的方式还是我错了?
  • @Pratik ViewPager pager = (ViewPager) findViewById(R.id.viewpager);它是viewpager_layout.xml中定义的viewpager

标签: android android-fragments viewpagerindicator


【解决方案1】:

尝试在你的 initialisePaging 方法的末尾添加这个:

        pager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            mPagerAdapter.getPageTitle(position);
        }
    });

它对我有用:)

【讨论】:

  • 观看 titlepageindicator 的网站你也应该添加这个 titleIndicator.setOnPageChangeListener(mPageChangeListener); 所以创建一个监听器对象并设置它们,不确定它是否会工作
【解决方案2】:

像这样更改您的 getItem() 方法

 @Override
    public Fragment getItem(int pos) {
        return TestFragment.newInstance(fragments.get(position % fragments.size));
    }

也把你的getPageTitle方法改成

    @Override
public CharSequence getPageTitle(int position) {
    return MyPagerAdapter.fragments.get(position % fragments.size);
}

TestFragment 类看起来像

        public final class TestFragment extends Fragment{


            static Typeface typeface, type2;
            private static final String KEY_CONTENT = "TestFragment:Content";



            public static TestFragment newInstance(String content)
            {

                TestFragment fragment = new TestFragment();

                StringBuilder builder = new StringBuilder();

                builder.append(content).append(" ");

                builder.deleteCharAt(builder.length() - 1);
                fragment.mContent = builder.toString();

                return fragment;
            }

            private String mContent = "???";

            @Override
            public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);


                if ((savedInstanceState != null) && savedInstanceState.containsKey(KEY_CONTENT))
                {
                    mContent = savedInstanceState.getString(KEY_CONTENT);
                }

            }

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


                LinearLayout layout = new LinearLayout(getActivity());

                layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));



     TextView text = new TextView(getActivity());
                text.setText(mContent);
                text.setTextSize(20f);
                layout.addView(text);
                layout.setGravity(Gravity.CENTER);

                return layout;
            }

            @Override
            public void onSaveInstanceState(Bundle outState)
            {
                super.onSaveInstanceState(outState);
                outState.putString(KEY_CONTENT, mContent);
            }
}

希望能解决你的问题

【讨论】:

  • TestFragment 应该是我的片段之一还是?
  • 测试片段是扩展片段的类
  • 现在 newInstance 方法是问题所在。我的片段中没有它。是构造函数还是什么?
  • 我还在上面的代码中导入了我的片段之一。你确定我需要改变这一切吗?我的意思是,该应用程序过去可以工作,并且在没有 newInstance 方法的情况下仍然可以正常工作。有必要吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2011-01-03
  • 2015-11-01
  • 2010-12-28
相关资源
最近更新 更多