콘텐츠 뷰가 조각 인 액티비티가 있는데이 액티비티에 뷰 페이지 및 뷰 페이지 표시기를 추가했습니다. 호출기에 대한 FragmentPagerAdapter를 만들었습니다. 어댑터는 세 개의 탭을 표시하기 위해 세 조각을 만듭니다. 그러나 프로젝트를 실행할 때 호출기 제목 만 표시됩니다. 왜 세 조각이 나옵니까?ViewPagerIndicator와 함께 조각이 표시되지 않는 이유
활동 라이프 사이클을 생성 할 때 호출기와 표시기를 만들었습니다.
public class BrowserActivity extends SherlockFragmentActivity
implements ReposFragment.OnFileSelectedListener, StarredFragment.OnStarredFileSelectedListener, OnBackStackChangedListener {
super.onCreate(savedInstanceState);
setContentView(R.layout.seadroid_main);
adapter = new SeafileTabsAdapter(getSupportFragmentManager());
pager = (ViewPager) findViewById(R.id.pager);
pager.setAdapter(adapter);
TabPageIndicator indicator = (TabPageIndicator)findViewById(R.id.indicator);
indicator.setViewPager(pager);
indicator.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(final int position) {
currentPosition = position;
supportInvalidateOptionsMenu();
disableUpButton();
}
@Override
public void onPageScrollStateChanged(int arg0) {
// TODO Auto-generated method stub
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
// TODO Auto-generated method stub
}
});
어댑터는 세 개의 탭 레이아웃 파일 seadroid_main.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment_container"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.viewpagerindicator.TabPageIndicator
android:id="@+id/indicator"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
/>
UPDATE
class SeafileTabsAdapter extends FragmentPagerAdapter implements IconPagerAdapter { public SeafileTabsAdapter(FragmentManager fm) { super(fm); } private ReposFragment reposFragment = null; private ActivitiesFragment activitieFragment = null; private StarredFragment starredFragment = null; @Override public Fragment getItem(int position) { switch (position) { case 0: if (reposFragment == null) { reposFragment = new ReposFragment(); } return reposFragment; case 1: if (starredFragment == null) { starredFragment = new StarredFragment(); } return starredFragment; case 2: if (activitieFragment == null) { activitieFragment = new ActivitiesFragment(); } return activitieFragment; default: return new Fragment(); } } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return getString(R.string.tabs_library).toUpperCase(); case 1: return getString(R.string.tabs_starred).toUpperCase(); case 2: return getString(R.string.tabs_activity).toUpperCase(); default: return null; } } @Override public int getIconResId(int index) { return ICONS[index]; } @Override public int getCount() { return ICONS.length; } }
을 디스플레이하기위한 세 개의 단편을 구성
ViewPager 튜토리얼에서 LineaLayout을 루트 컨테이너로 사용한다는 사실을 발견했습니다. FragmentLayout을 LineaLayout으로 변경해야합니다. LineaLayout으로 변경하면 앱이 다운되고 로그가
12-02 07:01:13.636: E/AndroidRuntime(3807): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.seafile.seadroid2/com.seafile.seadroid2.ui.activity.BrowserActivity}: android.view.InflateException: Binary XML file line #21: Error inflating class LineaLayout
12-02 07:01:13.636: E/AndroidRuntime(3807):at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2184)
의견을 보내 주셔서 감사합니다.하지만 SherlockFragmentActivity를 사용했기 때문에 루트보기를 Linealayout으로 변경할 수는 없습니다. 위의 코드 세그먼트는 getSupportFragmentManager와 같은 SherlockFragmentActivity 메소드에 대한 세부 종속성을 표시하지 않았습니다. 전체 코드 [여기] (https://github.com/haiwen/seadroid/blob/master/src/com/seafile/seadroid2/ui/activity/BrowserActivity.java)를 볼 수 있습니다. –
나는 당신이 나를 오해했다고 생각합니다. 나는 당신이 당신의 활동 수업을 바꾸기를 원하지 않는다. 나는 seadroid_main.xml 파일을 바꾸기를 바란다. 내 대답에 수정 된 XML을 추가했습니다 ... – Bruce
지금은 의미를 이해하지만 여전히 Linealayout을 사용할 수 없어 앱이 다운됩니다. –