0

我们重新来过吧。我正在使用片段编写应用程序。Stefan de Bruijn 建议这比使用已弃用的 TabHost 更好,他是对的,谢谢 Stefan。

由于其他成员的帮助,我终于从一个片段中获得了与我的交流活动的工作(你知道你是谁,谢谢大家)。

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

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

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

主要活动

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

有没有办法解决?

提前谢谢大家。加里

4

1 回答 1

2

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

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

选择汽车(或您的情况下的某些文本类型)后,必须在 EventBus 上发布 CarSelectedEvent。例子:

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

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

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

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

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

于 2013-01-24T15:53:14.100 回答