我们再来一次。 我正在使用片段编写应用程序。 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导入并实现的,所以我不能将它与其他任何东西一起使用。
有什么方法吗?
先谢谢大家。 加里
答案 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的更多信息。