Fragment栈

    |     2015年8月18日   |   Fragment碎片   |     0 条评论   |    1796

我们知道Android系统提供了一个任务栈用于保存Activity,同样也为Fragment提供了一个回退栈,如果我们把Fragment压入回退栈后点击返回可以显示上一个Fragment.

看下APIDemo下的实例
fragment_stack

布局fragment_stack.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="4dip" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="0"
        android:gravity="center_horizontal"
        android:measureWithLargestChild="true"
        android:orientation="horizontal"
        android:padding="4dip" >

        <Button
            android:id="@+id/new_fragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Push" >

            <requestFocus />
        </Button>

        <Button
            android:id="@+id/delete_fragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="0"
            android:text="Pop" >
        </Button>
    </LinearLayout>

    <FrameLayout
        android:id="@+id/simple_fragment"
        android:layout_width="match_parent"
        android:layout_height="0px"
        android:layout_weight="1" >
    </FrameLayout>

</LinearLayout>

代码:

public class FragmentStack extends Activity {
	int mStackLevel = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.fragment_stack);

		Button button = (Button) findViewById(R.id.new_fragment);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mStackLevel++;
				addFragmentToStack();
			}
		});
		button = (Button) findViewById(R.id.delete_fragment);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
				mStackLevel--;
				getFragmentManager().popBackStack(); //弹栈
			}
		});
	}

	void addFragmentToStack() {
        Fragment newFragment = CountingFragment.newInstance(mStackLevel);
        FragmentTransaction ft = getFragmentManager().beginTransaction();
        ft.replace(R.id.simple_fragment, newFragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.addToBackStack(null);
        ft.commit();
	}

	public static class CountingFragment extends Fragment {
		int mNum;
		private static int[] sColorValue = new int[] {
				android.R.color.holo_blue_light,
				android.R.color.holo_green_light,
				android.R.color.holo_orange_light,
				android.R.color.holo_red_light };

		/**
		 * Create a new instance of CountingFragment, providing "num" as an
		 * argument.
		 */
		static CountingFragment newInstance(int num) {
			CountingFragment f = new CountingFragment();

			// 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_stack_layout, container, false);
			View tv = v.findViewById(R.id.text);
			((TextView) tv).setText("Fragment #" + mNum);
			tv.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.gallery_thumb));
			Log.v("TAG", "mNum % 3 " + mNum % 3);
			tv.setBackgroundColor(getActivity().getResources().getColor(sColorValue[mNum % 3]));
			return v;
		}
	}

}

压栈代码

FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.addToBackStack(null);

弹栈代码

getFragmentManager().popBackStack();
转载请注明来源:Fragment栈

上一篇:

下一篇:

回复 取消