如何把pageadapter改為fragment state pager adapter
https://www.eoeandroid.com/qa/2012/0611/1624.html
問題
package com.gov.android; import java.util.ArrayList; import java.util.List; import viewpager.ViewPageAdapter; import com.gov.android.R; import android.app.Activity; import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.view.LayoutInflater; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; public class ViewPageActivity extends Activity implements android.view.View.OnClickListener, OnPageChangeListener{ private ViewPager mViewPager; private ViewPageAdapter mPageAdapter; private List<View> mListViews; private Button startnow; private final static int viewBackground[] = {R.drawable.view1, R.drawable.view2, R.drawable.view3, R.drawable.view4, R.drawable.view5, R.drawable.view6, R.drawable.view7}; private ImageView[] mImageViews; private int mViewCount; private int mCurSel; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_viewpage_layout); startnow=(Button) findViewById(R.id.startnow); startnow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent=new Intent(); intent.setClass(ViewPageActivity.this, WlwzActivity.class); startActivity(intent); ViewPageActivity.this.finish(); } }); initViewPage(); init(); } private void initViewPage() { mListViews = new ArrayList<View>(); LayoutInflater mLayoutInflater = getLayoutInflater(); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; mViewCount = viewBackground.length; for(int i = 0; i < mViewCount; i++) { // BitmapFactory.decodeResource(getResources(), viewBackground[i], options); View view = mLayoutInflater.inflate(R.layout.layout, null); view.setBackgroundResource(viewBackground[i]); // view.setBackgroundResource(decodeSampledBitmapFromResource(getResources(), viewBackground[i], 100, 100)); mListViews.add(view); } mPageAdapter = new ViewPageAdapter(mListViews); mViewPager = (ViewPager) findViewById(R.id.viewpager); mViewPager.setAdapter(mPageAdapter); mViewPager.setOnPageChangeListener(this); } private void init() { LinearLayout linearLayout = (LinearLayout) findViewById(R.id.llayout); mImageViews = new ImageView[mViewCount]; for(int i = 0; i < mViewCount; i++) { mImageViews[i] = (ImageView) linearLayout.getChildAt(i); mImageViews[i].setEnabled(true); mImageViews[i].setOnClickListener(this); mImageViews[i].setTag(i); } mCurSel = 0; mImageViews[mCurSel].setEnabled(false); } private void setCurView(int pos) { if (pos < 0 || pos >= mViewCount) { return ; } mViewPager.setCurrentItem(pos); } private void setCurPoint(int index) { if (index < 0 || index > mViewCount - 1 || mCurSel == index) { return ; } mImageViews[mCurSel].setEnabled(true); mImageViews[index].setEnabled(false); mCurSel = index; } @Override public void onClick(View v) { // TODO Auto-generated method stub int pos = (Integer)v.getTag(); setCurView(pos); setCurPoint(pos); } @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 } @Override public void onPageSelected(int arg0) { // TODO Auto-generated method stub setCurPoint(arg0); if( arg0 == mViewCount -1 ){ startnow.setVisibility(View.VISIBLE); } else{ startnow.setVisibility(View.GONE); } } }
pageadapter代碼如下
package viewpager; import java.util.List; import android.os.Parcelable; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; public class ViewPageAdapter extends PagerAdapter{ private final static String TAG = "MyPagerAdapter"; List<View> mViewList; public ViewPageAdapter(List<View> viewList) { mViewList = viewList; } @Override public int getCount() { // TODO Auto-generated method stub if (mViewList != null) { return mViewList.size(); } return 0; } @Override public Object instantiateItem(View view, int index) { // TODO Auto-generated method stub ((ViewPager) view).addView(mViewList.get(index), 0); return mViewList.get(index); } @Override public void destroyItem(View view, int position, Object arg2) { // TODO Auto-generated method stub ((ViewPager) view).removeView(mViewList.get(position)); } @Override public void finishUpdate(View arg0) { // TODO Auto-generated method stub } @Override public boolean isViewFromObject(View view, Object obj) { // TODO Auto-generated method stub return (view == obj); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View arg0) { // TODO Auto-generated method stub // Log.i(TAG, "startUpdate"); } }
解答
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; /** * @author archko */ public class FragmentPagerSupport extends FragmentActivity { yAdapter mAdapter; ViewPager mPager; private final static int viewBackground[]={R.drawable.image, R.drawable.image, R.drawable.image, R.drawable.image, R.drawable.image, R.drawable.image, R.drawable.image}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.fragment_pager); mAdapter=new MyAdapter(getSupportFragmentManager()); mPager=(ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); } public static class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return viewBackground.length; } @Override public Fragment getItem(int position) { return TestFragment.newInstance(position); } } public static class TestFragment extends Fragment { int mNum; /** * Create a new instance of CountingFragment, providing "num" * as an argument. */ static TestFragment newInstance(int num) { TestFragment f=new TestFragment(); // Supply num input as an argument. Bundle args=new Bundle(); args.putInt("num", num); f.setArguments(args); return f; } /** * When creating, retrieve this instance's number from its arguments. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mNum=getArguments()!=null?getArguments().getInt("num"):1; } /** * The Fragment's UI is just a simple text view showing its * instance number. */ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v=inflater.inflate(R.layout.fragment_pager_list, container, false); ImageView iv=(ImageView) v.findViewById(R.id.image); iv.setImageResource(viewBackground[mNum]); return v; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } } }
R.layout.fragment_pager
xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro android:orientation="vertical" android:padding="4dip" android:gravity="center_horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.support.v4.view.ViewPager android: android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1"> </android.support.v4.view.ViewPager> </LinearLayout>
R.layout.fragment_pager_list:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:andro android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android: android:scaleType="fitCenter" android:layout_width="fill_parent" android:layout_height="fill_parent"/> </LinearLayout>
就這樣,搞定。
最後更新:2017-04-02 16:47:44