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