两个(切换)按钮在片段之间是否具有同步行为?即:当在片段A中打开按钮A时,我希望按钮B在片段B中的外观也显示为打开。
我该怎么做?最终目标是在任一片段上都有一个全局按钮。
答案 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。 在活动中具有共享属性。在每个片段中,转到父活动以在单击按钮时获得该属性。 为了减少依赖性,请使用接口从活动中获取数据,如提供的链接所示