閱讀241 返回首頁    go 阿裏雲 go 技術社區[雲棲]


如何把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

  上一篇:go 追本溯源 - Eclipse源碼窺探
  下一篇:go Java 筆記03