본문 바로가기

6. With IT/6.1 Android

FragmentPagerAdapter, FragmentStatePagerAdapter의 사용

Fragment와 VIewPager를 사용하다 헛갈리는 것이 있어 포스팅한다......ㅡㅡ 
참고:http://www.truiton.com/2013/05/android-fragmentstatepageradapter-example/ 

 [dynamic한 fragment를 쓸 때에는 FragmentStatePagerAdapter] 

 fragment_pager.xml



    
    

    

        

        
    


MainActivity
package com.truiton.fragmentstatepageradapter;

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.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends FragmentActivity {
	static final int ITEMS = 10;
	MyAdapter mAdapter;
	ViewPager mPager;

	@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);

		Button button = (Button) findViewById(R.id.first);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mPager.setCurrentItem(0);
			}
		});
		button = (Button) findViewById(R.id.last);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mPager.setCurrentItem(ITEMS - 1);
			}
		});
	}

	public static class MyAdapter extends FragmentStatePagerAdapter {
		public MyAdapter(FragmentManager fragmentManager) {
			super(fragmentManager);
		}

		@Override
		public int getCount() {
			return ITEMS;
		}

		@Override
		public Fragment getItem(int position) {
			switch (position) {
			case 0: // Fragment # 0 - This will show image
				return ImageFragment.init(position);
			case 1: // Fragment # 1 - This will show image
				return ImageFragment.init(position);
			default:// Fragment # 2-9 - Will show list
				return ArrayListFragment.init(position);
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

fragment_image.xml



    

    



ImageFragment
package com.truiton.fragmentstatepageradapter;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ImageFragment extends Fragment {
	int fragVal;

	static ImageFragment init(int val) {
		ImageFragment truitonFrag = new ImageFragment();
		// Supply val input as an argument.
		Bundle args = new Bundle();
		args.putInt("val", val);
		truitonFrag.setArguments(args);
		return truitonFrag;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		fragVal = getArguments() != null ? getArguments().getInt("val") : 1;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View layoutView = inflater.inflate(R.layout.fragment_image, container,
				false);
		View tv = layoutView.findViewById(R.id.text);
		((TextView) tv).setText("Truiton Fragment #" + fragVal);
		return layoutView;
	}
}

fragment_pager_list.xml



    

    

        
    



ArrayListFragment
package com.truiton.fragmentstatepageradapter;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ArrayListFragment extends ListFragment {
	int fragNum;
	String arr[] = { "This is", "a Truiton", "Demo", "App", "For", "Showing",
			"FragmentStatePagerAdapter", "and ViewPager", "Implementation" };

	static ArrayListFragment init(int val) {
		ArrayListFragment truitonList = new ArrayListFragment();

		// Supply val input as an argument.
		Bundle args = new Bundle();
		args.putInt("val", val);
		truitonList.setArguments(args);

		return truitonList;
	}

	/**
	 * Retrieving this instance's number from its arguments.
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		fragNum = getArguments() != null ? getArguments().getInt("val") : 1;
	}

	/**
	 * The Fragment's UI is a simple text view showing its instance number and
	 * an associated list.
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View layoutView = inflater.inflate(R.layout.fragment_pager_list,
				container, false);
		View tv = layoutView.findViewById(R.id.text);
		((TextView) tv).setText("Truiton Fragment #" + fragNum);
		return layoutView;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		setListAdapter(new ArrayAdapter(getActivity(),
				android.R.layout.simple_list_item_1, arr));
	}

	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		Log.i("Truiton FragmentList", "Item clicked: " + id);
	}
}


[Static한 fragment를 쓸 때에는 FragmentPagerAdapter] 
fragment_pager.xml


 
    
    
 
    
 
        
 
        
    
 


MainActivity
package com.truiton.fragmentpageradapter;

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.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends FragmentActivity {
	static final int ITEMS = 10;
	MyAdapter mAdapter;
	ViewPager mPager;

	@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);

		Button button = (Button) findViewById(R.id.first);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mPager.setCurrentItem(0);
			}
		});
		button = (Button) findViewById(R.id.last);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mPager.setCurrentItem(ITEMS - 1);
			}
		});
	}

	public static class MyAdapter extends FragmentPagerAdapter {
		public MyAdapter(FragmentManager fragmentManager) {
			super(fragmentManager);
		}

		@Override
		public int getCount() {
			return ITEMS;
		}

		@Override
		public Fragment getItem(int position) {
			switch (position) {
			case 0: // Fragment # 0 - This will show image
				return ImageFragment.init(position);
			case 1: // Fragment # 1 - This will show image
				return ImageFragment.init(position);
			default:// Fragment # 2-9 - Will show list
				return TruitonListFragment.init(position);
			}
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}

fragment_image.xml


 
    
 
    
 


ImageFragment
package com.truiton.fragmentpageradapter;

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class ImageFragment extends Fragment {
	int fragVal;

	static ImageFragment init(int val) {
		ImageFragment truitonFrag = new ImageFragment();
		// Supply val input as an argument.
		Bundle args = new Bundle();
		args.putInt("val", val);
		truitonFrag.setArguments(args);
		return truitonFrag;
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		fragVal = getArguments() != null ? getArguments().getInt("val") : 1;
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View layoutView = inflater.inflate(R.layout.fragment_image, container,
				false);
		View tv = layoutView.findViewById(R.id.text);
		((TextView) tv).setText("Truiton Fragment #" + fragVal);
		return layoutView;
	}
}

fragment_pager_list.xml


 
    
 
    
 
        
    
 


TruitonListFragment
package com.truiton.fragmentpageradapter;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class TruitonListFragment extends ListFragment {
	int fragNum;
	String arr[] = { "This is", "a Truiton", "Demo", "App", "For", "Showing",
			"FragmentPagerAdapter", "and ViewPager", "Implementation" };

	static TruitonListFragment init(int val) {
		TruitonListFragment truitonList = new TruitonListFragment();

		// Supply val input as an argument.
		Bundle args = new Bundle();
		args.putInt("val", val);
		truitonList.setArguments(args);

		return truitonList;
	}

	/**
	 * Retrieving this instance's number from its arguments.
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		fragNum = getArguments() != null ? getArguments().getInt("val") : 1;
	}

	/**
	 * The Fragment's UI is a simple text view showing its instance number and
	 * an associated list.
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View layoutView = inflater.inflate(R.layout.fragment_pager_list,
				container, false);
		View tv = layoutView.findViewById(R.id.text);
		((TextView) tv).setText("Truiton Fragment #" + fragNum);
		return layoutView;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		super.onActivityCreated(savedInstanceState);
		setListAdapter(new ArrayAdapter(getActivity(),
				android.R.layout.simple_list_item_1, arr));
	}

	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		Log.i("Truiton FragmentList", "Item clicked: " + id);
	}
}



'6. With IT > 6.1 Android' 카테고리의 다른 글

UI와 Handler  (0) 2015.07.27
GCM 푸시서버연동 설정 - Server  (1) 2015.04.10
GCM 푸시서버연동 설정 - Client  (3) 2015.04.10
ScalableLayout  (0) 2015.03.06
EventBus기법  (0) 2015.03.06