Fragment 练习1

三个java文件+

一个layout文件

 

入口MainActivity.java

implements Myfragment的接口。(当用户点击Fragment Item时,回调Activity中方法)

接口方法 执行new MyFragment() ,并显示在右侧。

 

layout.xml

一个Fragment和一个FrameLayout,width比例:1:3.

 

ManyBooks.java

静态实体类

 

MyFragment.java

package com.example.andrid_test_1212;

import com.example.andrid_test_1212.ManyBooks;
import android.app.Activity;
import android.app.ListFragment;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MyFragment extends ListFragment

{
	public static final String ITEM_NAME = "item_name";
	private Callbacks mCallbacks;
	private ManyBooks.Book book;
	/*
	 * 标记是左侧还是右侧Fragment
	 */
	private boolean isLeft = true;

	// 定义一个回调接口,该Fragment所在Activity需要实现该接口
	// 该Fragment将通过该接口与它所在的Activity交互
	public interface Callbacks {
		public void onItemSelected(Integer id);
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		Bundle bundle = getArguments();

		// 这是右侧的Fragment
		// 仅展示展示图书详情
		if (bundle != null) {
			Integer integer = bundle.getInt(ITEM_NAME);
			book = ManyBooks.ITEM_MAP.get(integer);
			String[] strings = new String[] { book.desc };

			ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(
					getActivity(),
					android.R.layout.simple_list_item_activated_1, strings);
			setListAdapter(arrayAdapter);

			isLeft = false;
		} else {
			// 左侧的Fragment
			// 设置Fragment的Adapter
			isLeft = true;
			ArrayAdapter<ManyBooks.Book> bookAdapter = new ArrayAdapter<ManyBooks.Book>(
					getActivity(),
					android.R.layout.simple_list_item_activated_1,
					android.R.id.text1, ManyBooks.ITEMS);
			setListAdapter(bookAdapter);
		}

	}

	// 当该Fragment被添加、显示到Activity时 回调
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		// Acitivity未实行CallBacks,抛出异常。
		boolean bo = activity instanceof Callbacks;
		if (bo) {

		} else {
			throw new IllegalStateException("MainActivity必须实现Callbacks接口!");
		}
		// 把该Activity当成Callbacks对象
		mCallbacks = (Callbacks) activity;
	}

	// 当该Fragment从它所属的Activity中被删除时回调该方法
	@Override
	public void onDetach() {
		super.onDetach();
		// 将mCallbacks赋为null。
		mCallbacks = null;
	}

	// 点击列表项,回调本method
	@Override
	public void onListItemClick(ListView listView, View view, int position,
			long id) {

		super.onListItemClick(listView, view, position, id);
		if (isLeft) {
			// mCallbacks的onItemSelected方法
			mCallbacks.onItemSelected(ManyBooks.ITEMS.get(position).id);
		}

	}

	/*
	 * 这个方法从未用过
	 */
	public void setActivateOnItemClick(boolean activateOnItemClick) {
		getListView().setChoiceMode(
				activateOnItemClick ? ListView.CHOICE_MODE_SINGLE
						: ListView.CHOICE_MODE_NONE);
	}
}


ManyBooks.java

package com.example.andrid_test_1212;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ManyBooks {
	/*
	 * 静态内部类
	 */
	public static class Book {
		public Integer id;
		public String title;
		public String desc;

		public Book(Integer id, String title, String desc) {
			this.id = id;
			this.title = title;
			this.desc = desc;
		}

		@Override
		public String toString() {
			return title;
		}
	}

	// 存各种book的list
	public static List<Book> ITEMS = new ArrayList<Book>();
	// book 对应Map
	public static Map<Integer, Book> ITEM_MAP = new HashMap<Integer, Book>();

	static {
		// 静态代码块,什么时候初始化?
		// 加载阶段。先初始化static variables
		// 再次初始化 static{}

		addItem(new Book(1, "李刚的讲义", "好像很牛。"));
		addItem(new Book(2, "Android讲义2", "更牛"));
		addItem(new Book(3, "低调哥", "好像很牛。"));
		addItem(new Book(4, "高调哥", "更牛"));
	}

	private static void addItem(Book book) {
		ITEMS.add(book);
		ITEM_MAP.put(book.id, book);
	}
}


MainActivity.java

package com.example.andrid_test_1212;

import android.app.Activity;
import android.app.FragmentTransaction;
import android.os.Bundle;

public class MainActivity extends Activity implements
		MyFragment.Callbacks {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// 加载/res/layout目录下的activity_book_twopane.xml布局文件
		//layout文件中,已有一个fragment
		setContentView(R.layout.activity_book_twopane);
	}

	// 实现Callbacks接口必须实现的方法
	@Override
	public void onItemSelected(Integer id) {
		// 向Fragment传递参数
		Bundle bundle = new Bundle();
		//MyFragment.ITEM_NAME的值:item_name
		//id为1,2,3,4
		bundle.putInt(MyFragment.ITEM_NAME, id);
		// 创建MyFragment对象
		MyFragment fragment = new MyFragment();
		// 提供构造参数
		fragment.setArguments(bundle);

		// 使用fragment替换book_detail_container容器当前显示的Fragment
		FragmentTransaction fragmentTransaction = getFragmentManager()
				.beginTransaction();
		//R.id.book_detail_container的Fragment将被替换
		//新的Fragment
		fragmentTransaction.replace(R.id.book_detail_container, fragment)
				.commit();
	}
}


layout.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- 定义一个水平排列的LinearLayout,并指定使用中等分隔条 -->
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="horizontal"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	android:layout_marginLeft="16dp"
	android:layout_marginRight="16dp"
	android:divider="?android:attr/dividerHorizontal"
	android:showDividers="middle">
	<!-- 添加一个Fragment -->
	<fragment
		android:name="com.example.andrid_test_1212.MyFragment"
		android:id="@+id/book_list"
		android:layout_width="0dp"
		android:layout_height="match_parent"
		android:layout_weight="1" />
	<!-- 添加一个FrameLayout容器 -->
	<FrameLayout
		android:id="@+id/book_detail_container"
		android:layout_width="0dp"
		android:layout_height="match_parent"
		android:layout_weight="3" />
</LinearLayout>


 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值