如何在两个单独的片段中同步两个按钮

时间:2018-07-23 04:39:10

标签: android android-fragments android-button android-switch

两个(切换)按钮在片段之间是否具有同步行为?即:当在片段A中打开按钮A时,我希望按钮B在片段B中的外观也显示为打开。

我该怎么做?最终目标是在任一片段上都有一个全局按钮。

4 个答案:

答案 0 :(得分:1)

这取决于两个片段是否都在同一活动上。如果是的话,那么您只需要在所述活动上设置一个布尔标志,并根据该标志进行同步即可。

如果不是,则可以创建一个布尔首选项并基于该首选项进行同步。希望这可以帮助。如果您需要代码示例,请告诉我。

user.first_name

有关详细信息,请查看this page

答案 1 :(得分:1)

您可以在活动中使用布尔标志并将其默认设置为false,并且在任一片段中按下任何一个开关时,将其值设置为true,并且当您导航至另一个片段时,请检查标志值及其是否true,然后将其打开或关闭。

答案 2 :(得分:1)

片段之间的通信示例。以下示例是从Communicating with Other Fragments

修改而来的

步骤1 。创建界面

public interface ButtonCallback{
    void onClick(boolean val)
}

第2步。在同时承载片段A和片段B的HostActivity中,使HostActivity实现接口ButtonCallback

public class HostActivity extends AppCompatActivity implements ButtonCallback{

    void onClick(boolean val){
    }
}

第3步。在片段A和B中,通过投射活动初始化回调

class FragmentA extends Fragment{

    ButtonCallback callback;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        //Make sure activity host implement ButtonCallback interface
        try {
            callback= (ButtonCallback ) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
            + " must implement ButtonCallback");
        }
    }

    //public method to update fragment's button state
    public void setGlobalButtonState(boolean val){
        //globalButton has been initialized in onCreateView function
        globalButton.setEnabled(val);
    }
}

class FragmentB extends Fragment{

    ButtonCallback callback;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        try {
            callback= (ButtonCallback ) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
            + " must implement ButtonCallback");
        }
    }

    public void setGlobalButtonState(boolean val){
        //globalButton has been initialized in onCreateView function
        globalButton.setEnabled(val);
    }
}

步骤4 。在片段A中,当用户单击按钮时调用ButtonCallback.onClick(boolean)

globalButton.setOnClickListener(new View.OnClickListener(View v){
    Boolean value  = !v.isEnabled();
    callback.onClick(value)
});

步骤5 。在HostActivity的onClick函数中,找到一种方法来获取适合您的上下文的Fragment B,并通过setGlobalButtonState函数更新Fragment B中的按钮

void onClick(boolean val){
    //get Fragment B.
    fragmentB.setGlobalButtonState(val);
}

补充说明,如果该按钮是全局按钮,则可能需要考虑将该按钮放到主机“活动”上,而不适合您的情况。

答案 3 :(得分:0)

这是有关与其他片段进行通信的开发人员指南:https://developer.android.com/training/basics/fragments/communicating。 在活动中具有共享属性。在每个片段中,转到父活动以在单击按钮时获得该属性。 为了减少依赖性,请使用接口从活动中获取数据,如提供的链接所示