多片段到活动的沟通

时间:2013-01-24 15:41:02

标签: android android-fragments

我们再来一次。 我正在使用片段编写应用程序。 Stefan de Bruijn建议这比使用已弃用的TabHost更好,他说得对,谢谢Stefan。

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

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

如果您喜欢所有不同片段可以与之交谈的活动,是否有任何方法可以创建通用的“监听器”?

为了让一个片段传递数据,我使用了以下内容。

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导入并实现的,所以我不能将它与其他任何东西一起使用。

有什么方法吗?

先谢谢大家。 加里

1 个答案:

答案 0 :(得分:2)

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

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

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

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

对Event感兴趣的所有片段或活动都必须实现一个名为:

的方法
onEvent(CarSelectedEvent event){
... update your view
}

假设您有3个片段显示汽车详细信息,每个片段都会收到CarSelectedEvent并可以更新视图。从屏幕上删除片段时(例如在较小的屏幕或屏幕旋转上),逻辑不会改变。唯一的区别是接收事件的碎片较少。

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