2016-06-12 138 views
0

我试图将数据从片段传递到ViewPager幻灯片片段。 我的活动xml分为两半。 1用按钮监听器输入的片段。 3片段幻灯片输出。 我想要做的就是将数据从片段(输入)传递到所有3片段幻灯片(输出),所以我可以滑过我计算的数据。从片段向viewpager传递数据

我试图使用一个接口将数据从片段(输入)通过活动传递给片段幻灯片。一旦我按下按钮侦听器发送数据,我的应用就崩溃了。我得到一个NullPointerException。

做这项工作的最好或最简单的方法是什么?我真的被这个问题困住了。

THX。

+0

如果您发布代码,我们可以帮助您更容易 – PsyGik

回答

0

我想你应该只是通过在你的FragmentPagerAdapter中添加一个辅助代码来保留每个片段的引用。你的每个片段都应该实现一个接口。无论何时需要检查实例是否不等于null,则调用接口方法传递数据。

下面的代码将帮助您保留片段的引用。 https://stackoverflow.com/a/29269509/4901098

+0

这会让代码太多! – Eenvincible

+0

是的,我建议不要考虑设计。如果需要考虑设计,那么他可能会在这里使用观察者模式。使用数据模型将第一个片段中正在使用的数据。这个模型是可观察的,无论哪个片段有兴趣观察变化都可以是观察者,并相应地改变其观点。 –

0

试试这个办法:将以下内容添加到您的module水平build.gradle文件

compile 'org.greenrobot:eventbus:3.0.0' 

然后,创建一个代表你的活动常规Java类。

public class UpdateFragmentsUIEvent{ 

    //add your values you want to pass to your other fragments 
    private String valueA; 
    private String valueB; 
    private String valueC; 
    //.....others? 

    public UpdateFragmentsUIEvent(){ 
    } 

    //add getters and setters here 
} 

现在你已经创建了事件类,因为你要更新的片段(不是第一个,但你要的那些传递的数据),请执行下列操作:

public class FragmentB extends Fragment{ 

    @Override 
    public void onAttach(Context context){ 

     super.onAttach(context); 

     //important here - could be done inside onCreate() 
     EventBus.getDefault().register(this); 
    } 

    //very important here as well 
    public void onEvent(UpdateFragmentsUIEvent event){ 
     /* this event instance has all your values here now */ 

     String valueA = event.getValueA(); 
     String valueB = event.getValueB(); 

     /* Now you can update your views accordingly */ 
    } 

    /* don't forget to unregister inside onDestroy */ 
    @Override 
    public void onDestroy(){ 

     super.onDestroy(); 
     EventBus.getDefault().unregister(this); 
    } 
} 

//somewhere when a button is clicked after entering data 
EventBus.getDefault().post(new UpdateFragmentsUIEvent(valueA, valueB, valueC)); 

最后,您输入的值实际上通知您的片段,你必须张贴这样的新崛起的情况下,我想第一个片段内部10

就这样,你就完成了!忘记接口并坚持推荐的设计模式,遵循松散耦合的代码,如本例中使用的发布者/订阅者模式。

我希望这可以帮助,请让我知道如果你需要更多的帮助!

相关问题