设为首页 加入收藏

TOP

fragment间的数据传递(二)
2017-10-16 18:18:40 】 浏览:4349
Tags:fragment 数据 传递
log.setTargetFragment(MainFragment.this,REQUEST_DATE); dialog.show(manager,DIALOG_DATE); //显示DialogFragment } }); return v; } //响应DatePicker对话框 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(resultCode!= Activity.RESULT_OK){ return; } if (requestCode==REQUEST_DATE){ Date date=(Date) data.getSerializableExtra(DatePickerFragment.EXTRA_DATE); mCrime.setDate(date); mDateButton.setText(mCrime.getDate().toString()); } super.onActivityResult(requestCode, resultCode, data); } }

4.DatePickerFragment.java

直接获取保存在arguments中的数据,并将数据显示,最后设置目标fragment。

package com.example.mytest;

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.DatePicker;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DatePickerFragment extends DialogFragment{
    private static final String ARG_DATE="date";
    public static final String EXTRA_DATE= "com.example.mytest.date";

    private DatePicker mDatePicker;



    //便于被调用传递数据给DatePickerFragment
    //保存日期到argument bundle中,便于DatePickerFragment直接获取
    public static DatePickerFragment newInstance(Date date){

        Bundle args=new Bundle();
        args.putSerializable(ARG_DATE,date);

        DatePickerFragment fragment=new DatePickerFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //获取Date对象并初始化DatePicker
        Date date=(Date)getArguments().getSerializable(ARG_DATE);

        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        int year=calendar.get(Calendar.YEAR);
        int month=calendar.get(Calendar.MONTH);
        int day=calendar.get(Calendar.DAY_OF_MONTH);

        //添加DatePicker
        View v=LayoutInflater.from(getActivity())
                .inflate(R.layout.dialog_date,null);

        mDatePicker=(DatePicker)v.findViewById(R.id.dialog_date_picker);
        mDatePicker.init(year,month,day,null);

        return new AlertDialog.Builder(getActivity())
                .setView(v)
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(android.R.string.ok,
                        new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                int year=mDatePicker.getYear();
                                int month=mDatePicker.getMonth();
                                int day=mDatePicker.getDayOfMonth();
                                Date date=new GregorianCalendar(year,month,day).getTime();
                                sendResult(Activity.RESULT_OK,date);
                            }
                        })
                .create();
    }

    //回调目标fragment
    private void sendResult(int resultCode,Date date){
        if (getTargetFragment()==null){
            return;
        }
        Intent intent=new Intent();
        intent.putExtra(EXTRA_DATE,date);

        getTargetFragment().onActivityResult(getTargetRequestCode(),resultCode,intent);
    }
}

5.MainActivity.java

托管MainFragment,使界面呈现出来。

package com.example.mytest;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇android studio 使用adb命令传递.. 下一篇DatePickerDialog日期对话框以及..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目