今天我将要讲的是fragment间的数据是如何进行传递的。这里我将举个简单的例子。
首先要有个MainActivity,它托管了MainFragment,而MainFragment又托管了DatePickerFragment。其间用到了简单的模型Crime,它只有Date类型的mDate一个属性。例子中的关注点是日期怎么在MainFragment和DatePickerFragment间传递的。
1.调整布局
strings.xml添加字符串资源
<resources>
<string name="app_name">mytest</string>
<string name="date_picker_title">Date of crime:</string> <!--添加这一行-->
</resources>
activity_main.xml添加FrameLayout布局
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.mytest.MainActivity">
</FrameLayout>
fragment_main.xml中添加button组件
<Button
android:id="@+id/crime_data"
android:text="初始时间"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
dialog_date.xml添加DatePicker组件
<DatePicker
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:calendarViewShown="false">
</DatePicker>
public class Crime {
private Date mDate;
public Crime() {
mDate=new Date();
}
public Date getDate() {
return mDate;
}
public void setDate(Date date) {
mDate = date;
}
}
3. MainFragment.java
继承Fragment,在onCreateView方法中创建并配置fragment视图,其间设置按钮的监听事件,点击后,调用DatePickerFragment的静态函数newInstance,将数据保存在argument bundle中,并同时设置DatePickerFragment的目标fragment是MainFragment。最后设置对于DatePicker对话框的响应。
package com.example.mytest;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import java.util.Date;
public class MainFragment extends Fragment {
private Crime mCrime;
private Button mDateButton;
private static final String DIALOG_DATE="DialogDate";
private static final int REQUEST_DATE=0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mCrime=new Crime();
}
//创建和配置fragment视图
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
//加载布局
View v=inflater.inflate(R.layout.fragment_main,container,false);
//生成并使用组件
mDateButton=(Button)v.findViewById(R.id.crime_data);
mDateButton.setText(mCrime.getDate().toString());
//mDateButton.setEnabled(false);
mDateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
FragmentManager manager=getFragmentManager();
//newInstance替换构造方法
//DatePickerFragment dialog=new DatePickerFragment();
DatePickerFragment dialog=DatePickerFragment.newInstance(mCrime.getDate());
//设置目标fragment
dia