2013-01-24 97 views
0

这里我们再次去。 我在写一个使用片段的应用程序。 Stefan de Bruijn建议这比使用弃用的TabHost更好,他是对的,谢谢Stefan。多片段活动沟通

我终于得到了从一个片段到我的沟通活动工作得益于其他成员的帮助(你知道你是谁,谢谢大家)。

我现在有什么希望是最后一个问题。我的应用程序在顶部是TextBox,它是Activity的一部分,左边是一个永久ListFragment,右边是FrameLayout,用于显示不同的片段。

如果你喜欢在Activity中所有不同的碎片可以与之通话,是否有任何方法可以创建通用的“侦听器”?

要获得一个片段传递数据我已经使用了以下内容。

MainActivity

import com.example.fragger.CoreFragment.OnDataPass; 

import android.os.Bundle; 
import android.app.Activity; 
import android.util.Log; 
import android.view.Menu; 
import android.widget.EditText; 

public class MainActivity extends Activity implements OnDataPass { 

和片段代码: -

package com.example.fragger; 


import android.app.Activity; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.os.Bundle; 
import android.widget.Button; 
import android.widget.RelativeLayout; 
import android.view.View.OnClickListener; 


public class CoreFragment extends Fragment{ 

int index; 
Button Button1,Button2,Button3; 
String Str,data; 
OnDataPass dataPasser; 

@Override 
public void onAttach(Activity a) { 
    super.onAttach(a); 
     dataPasser = (OnDataPass) a; 
} 


public static CoreFragment newInstance(int index) { 
    CoreFragment coreFragment = new CoreFragment(); 
    coreFragment.index = index; 
    return coreFragment; 
} 


public interface OnDataPass { 
    public void onDataPass(String data); 

} 

这是一个好主意,直​​到我告诉我的框架(例如PlaceFragment)不同的片段。由于onDataPass是从CoreFragment导入并实现的,因此我无法将其与其他任何东西一起使用。

有没有办法解决这个问题?

感谢所有提前。 Gary

回答

1

对于片段之间的通信,您可以使用EventBus。 EventBus使您的活动和片段松散耦合。

第一步是定义一个EventType。例如:CarSelectedEvent

在选择Car(或您的案例中的某些文本类型)后,必须将CarSelectedEvent发布到EventBus上。 例子:

eventBus.post(new CarSelectedEvent("volvo")); 

所有片段或有兴趣的事件活动,必须实现一个名为方法:

onEvent(CarSelectedEvent event){ 
... update your view 
} 

假设你有3个片段展示车的细节,每一个片段接收CarSelectedEvent和可更新视图。从屏幕中删除片段时(例如,在较小的屏幕或屏幕上旋转),逻辑不会改变。唯一的区别是接收事件的碎片较少。

你可以在https://github.com/greenrobot/EventBus找到更多关于EventBus的信息。

+0

谢谢你。查看了github上的EventBus并下载了zip文件。愚蠢的问题可能,但我仍然在Android开发世界学习,我如何在日食中“插入”事件总线到我的应用程序?对不起,如果我问一个愚蠢的问题。 – Gary

+1

将jar放入项目的libs文件夹中,并在Eclipse中添加jar依赖项。在http://www.slideshare.net/greenrobot/eventbus-for-android-15314813上,您可以找到关于EventBus的演示文稿。 – userM1433372

+0

好的,谢谢你,我会在周末试一试。有一个好的一切! – Gary