fragment之间通信

fragment的实现是独立于activity的,可以被用于多个activity,每个activity可包含同一个fragment的不同实例

fragment可调用getView()方法得到它所在activity对象,然后通过findviewbyid找到activity中的控件,VIew view = getView().findViewbyId();

activity也可以通过FragmentManager的方法查找它所包含的fragment    content = (ContentFragment) getFragmentManager().findFragmentById(R.id.content);

假如

1、有TitleFragment显示标题

2、MainActivity,其中在MainActivity的布局里放定义fragment

<fragment
        android:id="@+id/title"
        class="com.ccc.fragment.TitleFragment"
        android:layout_width="0dip"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        />
    <fragment
        android:id="@+id/content"
        class="com.ccc.fragment.ContentFragment"
        android:layout_width="0dip"
        android:layout_weight="2"
        android:layout_height="wrap_content"
        />


3、ContentFragment显示内容,当点击TitleFragment里的标题时,ContentFragment会显示相应的内容

首先是TitleFragment定义一个接口,MainActivity实现这个接口,并且回调接口相关方法,在这个方法里可以进行相应的操作,比如ContentFragment显示内容,前提是在

MainActivity通过FragmentManager找到ContentFragment

public class TitleFragment extends ListFragment {
	
	
	private OnItemClickListener listener;
	

	public void setListener(OnItemClickListener listener) {
		this.listener = listener;
	}

	@Override
	public void onActivityCreated(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onActivityCreated(savedInstanceState);
		
		String[] objects = new String[]{
				"星期一",
				"星期二",
				"星期三",
				"星期四",
				"星期五",
				"星期六",
				"星期天"
		};
		
		setListAdapter(new ArrayAdapter<String>(
				getActivity(),
				android.R.layout.simple_list_item_1,
				android.R.id.text1, objects));
		
		listener.onItemClick(0);
	}
	
	@Override
	public void onListItemClick(ListView l, View v, int position, long id) {
		// TODO Auto-generated method stub
		super.onListItemClick(l, v, position, id);
		listener.onItemClick(position);
	}
	
	/**
	 * 第1步 
	 * @author ThinkPad
	 *
	 */
	interface OnItemClickListener{
		void onItemClick(int position);
	}
}


 

/**
 * 第2步  让Activity实现TitleFragment里面的接口
 * @author ThinkPad
 *
 */
public class MainActivity extends Activity implements OnItemClickListener{
    private TitleFragment title;
	private ContentFragment content;

	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //实例化TitleFragment 和  ContentFragment
        FragmentManager fm = getFragmentManager();
        title = (TitleFragment) fm.findFragmentById(R.id.title);
        content = (ContentFragment) fm.findFragmentById(R.id.content);
        
        /**
         * 第3步
         */
        //把接口对象传递给TitleFragment
		//这里实现了接口,也就是说当前activity是子类,通过这个方法传递,调用TitleFragment
		//的setListener进行初始化,就会调用TitleFragment里的onListItemClick()方法
        title.setListener(this);
    }

	public void onItemClick(int position) {
		// TODO Auto-generated method stub
		content.updateInfo(position);
	}
}


 

public class ContentFragment extends Fragment {

	
	String[] objects = new String[]{
			"星期一,唱歌ktv",
			"星期二,爬山。。",
			"星期三,购物  shopping ",
			"星期四,打游戏。 ",
			"星期五,看电影。。",
			"星期六,休息。。",
			"星期天,敲代码。。。"
	};
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		
		TextView tv = new TextView(getActivity());
		return tv;
	}
	
	
	/**
	 * 第4步  在ContentFragment里面定义一个方法
	 * @param position
	 */
	public void updateInfo(int position){
		TextView tv = (TextView) getView();
		tv.setText(objects[position]);
	}
	
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值