如何将值从一个片段传递到另一个片段

时间:2015-12-06 15:13:56

标签: android

我是android的新手,我很难理解如何将值从片段传递到另一个片段。我已经读过其他类似的帖子,但我似乎无法做到正确。我有一个datepicker片段,我需要将一些数据发送到另一个片段(itemfragment)。我在datepicker片段中有这个

@Override
public void onDateSet(DatePicker view, int year, int month, int date) {

    calendar.set(year, month + 1, date);

    int selDay = view.getDayOfMonth();
    int selMon = view.getMonth();
    int selYear = view.getYear();

    //set calendar to selected date
    Calendar c = Calendar.getInstance();
    c.set(selDay, selMon, selYear);
    c.add(Calendar.DATE, -1);
    Long twentyfourhrs = c.getTimeInMillis();
}

public interface sendValue{
    void sendData(Long twentyfourhrs);
}

sendValue sv;

@Override
public void onAttach(Activity activity) {
    super.onAttach(activity);
    try {
        sv = (sendValue) activity;
    }
    catch (ClassCastException e){
        throw new ClassCastException("implement sendValue method");
    }
}

然后在MainActivity中

public class MainActivity extends AppCompatActivity implements DatePickerFragment.sendValue{

@Override
public void sendData(Long twentyfourhrs) {
    Bundle bundle = new Bundle();
    bundle.putLong("24", twentyfourhrs);
    ItemFragment if = new ItemFragment();
    if.setArguments(bundle);
}
ItemFragment中的

Long reminder24;

public void setArguments(Bundle bundle){
    super.setArguments(bundle);
    reminder24 = bundle.getLong("24", twentyfourhrs);
}

AdapterView.OnItemSelectedListener listener = new AdapterView.OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

if...{
...}
else{
if (reminder.equals("24 hours")) {
makeToast(reminder + " from " + selected_date + " is "  + reminder24);

我不确定我所做的是否正确,但吐司中的提醒24返回为空。我做错了什么?

2 个答案:

答案 0 :(得分:1)

从发送片段结束使用Bundle将数据从一个片段发送到另一个片段

Fragment fragment = new Fragment();
            Bundle args = new Bundle();
            args.putString("value", key);
            fragment.setArguments(args);

在接收片段中获取数据使用此内部 onCreateview() onCreate() onActivityCreated()

Bundle myData = this.getArguments();
String data = myData.getDouble("value","data");

答案 1 :(得分:0)

我不知道你是如何将参数传递给片段的,但这些必须像这样接收:

Bundle bundle = getArguments();
bundle.getLong(/*default value*/, /*key*/); 

这通常是在onCreateView();方法中获得的。

注意:对于一个好习惯,您应该使用这些修饰符声明变量public static final,其中包含您需要发送的参数的键。