如何在fragment中设置boolean值并在android中获取活动

时间:2015-02-05 07:37:31

标签: android

行动:

 public class HomeActivity extends SherlockFragmentActivity
    {
    if(AppConstants.slidingcontactmap)
            {
            Log.E("Value","True")
            menu.setSlidingEnabled(true);
            }
            else
            {
    Log.E("Value","False")
                menu.setSlidingEnabled(false);
            }

    }

片段:

public void showContactList() {


        AppConstants.slidingcontactmap = true;
    }

    public void showMap() {


            AppConstants.slidingcontactmap = false;

    }

我想在Showcontact方法上设置true或1并且在片段中显示地图调用时为false或0我希望在活动中获取该值,我可以启用和禁用菜单滑动但我无法从片段获取值活动请检查并告诉我解决方案,以便我可以实施它

2 个答案:

答案 0 :(得分:1)

无论是否要启用滑动菜单,您都可以使用布尔值将BroadCast从对应片段发送到您的活动。

这是您发送BroadCast的方式

 LocalBroadcastManager
                    .getInstance(getActivity())
                    .sendBroadcast(
                            new Intent("update_boolean_variable").putExtra(
                                    "action",
                                    true or false));

并且在您的Activity中,您必须在onResume()中注册BroadCastReceiver并在onPause()中取消注册,如下所示

@Override
protected void onResume() {
    super.onResume();
    LocalBroadcastManager.getInstance(this).registerReceiver(
            updateBooleanBroadCastReceiver, new IntentFilter("update_boolean_variable"));
}

@Override
protected void onPause() {
    super.onPause();
    LocalBroadcastManager.getInstance(this).unregisterReceiver(
            updateBooleanBroadCastReceiver);
}

这是你的upadateBooleanBroadCastReceiver

private BroadcastReceiver upadateBooleanBroadCastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context Intent intent) {

        if(intent.getBooleanExtra("action",defaultValue)){
                // returns true means you have to disable sliding menu

        }else{
         // returns false means you have to enable sliding menu

        }

};

答案 1 :(得分:0)

您可以在这里阅读片段和活动之间的沟通http://developer.android.com/training/basics/fragments/communicating.html

我简要总结了它的运作方式:

您需要的是在片段中声明的接口以及实现它的活动,并在创建片段时将其传递给片段。

这样,片段可以调用接口(mListener.setValue(布尔值)),然后调用该活动。然后,活动将具有片段设置的值来完成其工作

编辑:

片段:

public interface FragmentMenuSlideInterface {
    void setSlideMenu(boolean slide);
}

public void setListener(FragmentMenuSlideInterface listener) {
    mListener = listener;
}

if (mapIsShowing) {
    mListener.setSlideMenu(false);
} else {
    mListener.setSlideMenu(true);
}

的活动:

public class MyActivity extends Activity implements FragmentMenuSlideInterface {

//When initialising the fragment
fragment.setListener(this);

@Override
public void setSlideMenu(boolean slide) {
    menu.slide(slide);
}