两个(切换)按钮是否可能在片段之间具有同步行为?即:当按钮A在片段A中打开时,我希望按钮B在片段B中的外观也显示为打开。
我该怎么做呢?最终目标是在任何一个片段上都有一个全局按钮。
片段之间的通信示例。下面的示例修改为与其他片段通信
第一步。创建一个接口
public interface ButtonCallback{
void onClick(boolean val)
}
第二步。在托管片段A和片段B的HostActivity
中,使HostActivity
实现接口按钮callback
。
public class HostActivity extends AppCompatActivity implements ButtonCallback{
void onClick(boolean val){
}
}
第三步。在片段A中
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);
}
}
第四步。在片段A中,调用ButtonCallback。当用户单击按钮时单击(布尔值)
globalButton.setOnClickListener(new View.OnClickListener(View v){
Boolean value = !v.isEnabled();
callback.onClick(value)
});
第五步。在HostActive的on点击
函数中,找到一种方法来获取与您的上下文相匹配的片段B,并通过setGlobalButtonState
函数更新片段B中的按钮
void onClick(boolean val){
//get Fragment B.
fragmentB.setGlobalButtonState(val);
}
另外注意,如果这个按钮是全局的,那么如果它适合你的上下文,就可以考虑将按钮放在主机活动上。
这将取决于两个片段是否在同一活动上。如果是,那么您所需要的只是上述活动上的布尔标志,同步取决于此。
如果没有,那么可能创建一个布尔首选项并基于此进行同步。希望这有帮助。如果您需要代码示例,请告诉我。
public interface Listener {
public boolean getFlag();
public void setFlag(boolean enable);
}
public class SomeActivity extends AppCompatActivity implements Listener {
// getFlag, setFlag implementation
}
public class FragmentA {
private boolean state;
private Listener listener;
private Switch switchBtn;
public void onAttach(Context ctx){
listener = (Listener) this.getActivity();
// check for ClassCast Exception
}
public void onActivityCreated() {
state = listener.getFlag();
switchBtn.setChecked(state);
}
}
有关详细信息,请查看此页
您可以在您的活动中使用布尔标志,默认情况下将其设置为false,当任何一个片段中的开关被按下时,将其值设置为true,当您导航到另一个片段时,检查标志值,如果为true,则将其切换开或关。
问题内容: 我有很多对象。 如何按名称和年龄先后按字母顺序对该数组排序? 您将使用哪种算法? 问题答案: 你可以使用以下方法: 现在按名称排序,然后按年龄排序。 “从字典上比较两个字符串”-来自docs。 是本机库中的静态方法。它会进行实际的排序,你只需要提供一个即可定义应该如何比较列表中的两个元素:这是通过提供你自己的方法实现来实现的。
我有对象数组。 如何按名称和年龄按字母顺序对该数组进行排序? 你会使用哪种算法?
我需要创建一个按钮,如下所示: HTML 如何在JS文档中指定这些函数?
问题内容: 我想使用rsync 在两个方向上 同步 两个目录。 我指的是经典意义上的同步( 不是 rsync手册中的含义): 我想 双向 更新目录,具体取决于哪个 更新 。 可以通过rsync (在Linux方式中更可取) 完成此操作吗? 如果没有,还有哪些其他解决方案? 问题答案: 只需使用“较新”模式(-u或– update标志)加上-t(复制文件修改时间),-r(用于递归文件夹)和-v(用于
我有两份清单: 我想要一个新的名单,比如: 我尝试了以下方法: 但有一些严重的错误
我写了一个启动两个线程的代码片段;一个线程打印所有奇数,而另一个线程打印所有偶数。我使用了内在锁和线程通信命令的组合来实现两个线程的正确交叉。这是我的代码, 以下是我的问题: > 奇数线程在printOdd()函数中执行,而偶数线程在print偶数()函数中执行。我对两个线程都使用一个内在锁;我不明白两个线程怎么能同时存在于各自的同步块中,因为使用了相同的锁。 我从代码中删除了线程通信语句(通知,