Fragment Arguments的使用

创建Fragment 的newInstance方法

创建 newInstance()方法, newInstance方法中给Fragment 设置Argument

private static final String ARGS_DATE = "date";

public static MyFragment newInstance(Date date){
    Bundle args = new Bundle();
    args.putSerializable(ARGS_DATE,date);
    MyFragment fragment  = new MyFragment();
    fragment.setArguments(args);
    return fragment;
}

然后在MyFragment的create方法中获取args,并对Fragment进行初始化.

Date date = (Date) getArguments().getSerializable(ARGS_DATE);
完整代码:
public class DatePickerFragment extends DialogFragment {
    private static final String ARGS_DATE = "date";
    private DatePicker mDatePicker;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        Date date = (Date) getArguments().getSerializable(ARGS_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);

        View view = LayoutInflater.from(getActivity()).inflate(R.layout.dialog_date, null);
        mDatePicker = (DatePicker) view.findViewById(R.id.dialog_date_picker);
        mDatePicker.init(year,month,day,null);

        return new AlertDialog.Builder(getActivity())
                .setView(view)
                .setTitle(R.string.date_picker_title)
                .setPositiveButton(android.R.string.ok,null)
                .create();
    }

    public static DatePickerFragment newInstance(Date date){
        Bundle bundle = new Bundle();
        bundle.putSerializable(ARGS_DATE, date);

        DatePickerFragment datePickerFragment = new DatePickerFragment();
        datePickerFragment.setArguments(bundle);
        return datePickerFragment;
    }
}

调用代码

mDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatePickerFragment picker = DatePickerFragment.newInstance(mCrime.getDate());
                FragmentManager manager =getFragmentManager();
                picker.show(manager,DIALOG_DATE);
            }
        });
### 回答1: 可以使用Bundle来传递数据。在Activity中,可以创建一个Bundle对象,将需要传递的数据放入Bundle中,然后通过setArguments()方法将Bundle对象传递给Fragment。在Fragment中,可以通过getArguments()方法获取传递过来的Bundle对象,然后从中取出需要的数据。具体代码如下: 在Activity中传递数据: ``` Bundle bundle = new Bundle(); bundle.putString("key", "value"); MyFragment fragment = new MyFragment(); fragment.setArguments(bundle); ``` 在Fragment中获取数据: ``` Bundle bundle = getArguments(); String value = bundle.getString("key"); ``` ### 回答2: 在Android开发中,我们可以通过使用Activity来向Fragment传递数据。下面是一个简单的示例。 1. 在Activity中,我们可以通过Bundle对象将数据传递给Fragment。可以在Activity的onCreate方法中创建一个Bundle对象,将需要传递的数据存入bundle中,然后通过Fragment的setArguments方法将bundle传递给Fragment。 ```java Bundle bundle = new Bundle(); bundle.putString("key", "value"); MyFragment fragment = new MyFragment(); fragment.setArguments(bundle); ``` 2. 在Fragment中,我们可以通过getArguments方法获取传递过来的数据。在Fragment的onCreate方法中,可以通过getArguments方法获取到传递过来的bundle对象,然后根据key获取对应的数据。 ```java Bundle bundle = getArguments(); if (bundle != null) { String value = bundle.getString("key"); } ``` 这样,我们就可以在Activity中将数据传递给Fragment,并在Fragment中获取到传递过来的数据。 需要注意的是,当我们重新创建Fragment的实例时,需要重新设置Arguments,因为FragmentManager在重新创建Fragment实例时并不会复制Arguments。另外,在Activity与Fragment的通信过程中,我们需要确保Fragment已经attached到Activity中,否则可能会出现NullPointerException。 这就是通过Activity向Fragment传递数据的基本步骤。希望能对你有所帮助! ### 回答3: 在Android开发中,activity是应用程序中的一个重要组件,而fragment是其中一个UI组件。在进行activity与fragment之间的数据传递时,可以通过使用bundle和接口回调来实现。 1. 使用Bundle传递数据给Fragment:在Activity中,可以创建一个Bundle对象,并通过put方法向Bundle中放入需要传递的数据。然后使用Fragment的setArguments方法将Bundle对象传递给Fragment。在Fragment中,通过getArguments方法获取到Bundle对象,并通过get方法获取到传递的数据。 例如,在Activity中传递数据给Fragment的代码如下: ```java Bundle bundle = new Bundle(); bundle.putString("data", "Hello Fragment"); Fragment fragment = new YourFragment(); fragment.setArguments(bundle); ``` 在Fragment中获取传递数据的代码如下: ```java Bundle bundle = getArguments(); String data = bundle.getString("data"); ``` 2. 使用接口回调传递数据给Fragment:首先,在Activity中创建一个接口,在该接口中定义一个传输数据的方法。然后,在Activity中实现该接口,并将实现的接口对象传递给Fragment。在Fragment中通过接口对象调用接口中的方法,从而实现数据的传递。 例如,先定义一个传递数据的接口: ```java public interface DataCallback { void onDataReceived(String data); } ``` 在Activity中实现该接口并传递给Fragment: ```java public class MainActivity extends AppCompatActivity implements DataCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Fragment fragment = new YourFragment(); ((YourFragment) fragment).setDataCallback(this); } @Override public void onDataReceived(String data) { // 在这里处理接收到的数据 } } ``` 在Fragment中调用接口中的方法传递数据: ```java public class YourFragment extends Fragment { private DataCallback dataCallback; public void setDataCallback(DataCallback dataCallback) { this.dataCallback = dataCallback; } // 在需要的地方调用dataCallback.onDataReceived("Hello Activity"); } ``` 通过以上的方式,就可以实现Activity向Fragment传递数据的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值