2015-12-06 94 views
0

我是新来的android,我很难理解如何将值从片段传递到另一个片段。我已经读过其他类似的线程,但我似乎无法做到。我有一个datepicker片段,我需要发送一些数据到另一个片段(itemfragment)。我在日期选择器片段MainActivity有这个如何将值从一个片段传递到另一个片段

@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"); 
    } 
} 

然后在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); 

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); 
} 

我不知道我所做的是正确的或没有,但在祝酒reminder24来到返回为空。我做错了什么?

+0

[实例化新Android碎片的最佳做法](ht tp://stackoverflow.com/questions/9245408/best-practice-for-instantiating-a-new-android-fragment) –

+0

我发现了一个适用于我的解决方案http://stackoverflow.com/a/34993646/5563156 –

+0

好的。我没有看到答案与这里的不同,或者我链接到 –

回答

0

我不知道你是如何传递参数给片段但这些都像这样接收:

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

这里面onCreateView();方法通常获得的。

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

1

阻止发送片段的最终用途包从一个片段的数据发送到另一

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"); 
+0

的帖子不同,但是在接收片段(ItemFragment)的onCreate期间没有输入该值。 ItemFragment是用户输入输入的地方。在ItemFragment中,当用户点击时会弹出一个按钮,弹出日期选择器对话框(因此是日期选择器片段)。 –

+0

在onCreateView()中使用它,首先检查你的发送数据是否正确,为发送和接收端添加一些toast以检查值 –

相关问题