내 응용 프로그램의 주요 활동에는 사용자 정의 ViewPager (비활성 슬쩍 동작) 및 FragmentPagerAdapter가있는 고정 탭 막대가 있습니다.조각에서 ViewPager로 제어되는 조각이 표시되지 않습니다.
이 탭 표시 줄은 세 가지 다른 조각에 액세스 할 수있게 해주 며 첫 번째 조각에서는 해당 조각과 관련된보기간에 스 와이프 할 수 있기를 원합니다.
처음에는 ViewFlipper를 사용하려고했지만 ViewPager와 동일한 제스처를 얻을 수 없어서 이제는 ViewPager를 구현하려고합니다.
ViewPager에 사용하는 코드는 this 페이지의 ViewPager에있는 AnimationsDemo 프로젝트에서 가져온 코드입니다. 비록 내가 당신이 버튼 프레스를 사용하여보기를 전환 할 수 있도록 낮은 막대를 제거하여 약간의 조정을 했어.
이 내 조각이 모습입니다 같은 :
import android.app.Fragment;
import android.app.FragmentManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v13.app.FragmentStatePagerAdapter;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class NewsFragment extends Fragment {
private static final int NUM_PAGES = 5;
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_screen_slide, container, false);
mPager = (ViewPager) rootView.findViewById(R.id.pager);
mPagerAdapter = new ScreenSlidePagerAdapter(getFragmentManager());
new setAdapterTask().execute();
return rootView;
}
private class setAdapterTask extends AsyncTask<Void,Void,Void>{
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void result) {
mPager.setAdapter(mPagerAdapter);
}
}
/**
* A simple pager adapter that represents 5 {@link ScreenSlidePageFragment} objects, in
* sequence.
*/
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ScreenSlidePageFragment.create(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
그리고에 속하는 XML :
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/textviewscreenslide"
android:text="Screen slide fragment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
/>
<android.support.v4.view.ViewPager
android:layout_below="@+id/textviewscreenslide"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
I에 유래에 인해 this 후 여기에 AsyncTask를 사용하고 있습니다를, 나 때문에 때때로 탭 항목간에 신속하게 전환 할 때 오류가 발생합니다.
이 내가 표시 할 조각이 모습입니다 같은 :
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ScreenSlidePageFragment extends Fragment {
public static final String ARG_PAGE = "page";
private int mPageNumber;
public static ScreenSlidePageFragment create(int pageNumber) {
ScreenSlidePageFragment fragment = new ScreenSlidePageFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
public ScreenSlidePageFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPageNumber = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup rootView = (ViewGroup) inflater.inflate(R.layout.fragment_screen_slide_page, container, false);
((TextView) rootView.findViewById(android.R.id.text1)).setText(getString(R.string.title_template_step, mPageNumber + 1));
return rootView;
}
public int getPageNumber() {
return mPageNumber;
}
}
그리고 그것과 함께가는 XML :
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView android:id="@android:id/text1"
style="?android:textAppearanceLarge"
android:textStyle="bold"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp" />
<TextView style="?android:textAppearanceMedium"
android:lineSpacingMultiplier="1.2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/lorem_ipsum" />
</LinearLayout>
</ScrollView>
을 그래서 프로그램에게 포함 된 조각을 실행할 때 ViewPager는 정상적으로 나타납니다. 상단의 텍스트 "화면 슬라이드 조각"을 볼 수 있으며 오류가 발생하지 않습니다. 실제로이 조각에서 ViewPager를 스 와이프 할 수도 있습니다. 오른쪽으로 스 와이프하면 첫 번째 조각에있는 파란색 표시기가 왼쪽에 표시되고 왼쪽으로 몇 번 스 와이프하면이 표시기가 오른쪽에 나타납니다. ViewPager가 실제로 존재하기 때문에 Fragments는 나타나지 않습니다.
중첩 된 ViewPager에 관한 this 프로젝트를 보았지만, API 레벨 17 이상이 필요합니다. 따라서 심지어 불가능할 수도 있습니다.
내 질문에, 이러한 조각 (4.0 이상 만 지원)을 표시하는 방법이 있습니까? 아니면 조각 /보기 (이 조각의 모든보기를 전환 할 수있는 또 다른 효율적인 방법입니다. 호출기는 레이아웃면에서 완전히 동일 할 것이고 차이점은 TextViews의 텍스트 일뿐입니다). 어쩌면 내가 완전히 놓친 동일한 문제를 정확히 설명하는 또 다른 스레드가있을 수 있습니다.