长话短说。
我有两个片段的主要活动。因此,这里不是主要活动,而是两个片段。在第一个片段中有一个开关。
当选中或取消选中开关时,是否可以从主活动更新背景?背景设置在content_main中。xml,因为在更改片段时没有转换。
那么这有可能吗?
我认为这会奏效:
if(switch.isChecked()) {
SharedPreferences sharedPref = getActivity().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("background1", R.drawable.background2);
editor.apply();
}
在主要活动中:
SharedPreferences sharedPref = getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
int bg = sharedPref.getInt("background1", R.drawable.background1);
getWindow().setBackgroundDrawableResource(bg);
还是因为片段本身没有加载新的内容而不可能?如果是这样。怎么可能?
提前谢谢各位
资料来源:
从另一个活动更改一个活动的背景
是的,这是可能实现的。我认为最简单的方法是通过侦听器/回调。
首先,创建listener类:
public interface MyCallback {
void onSwitchStateChanged(boolean isChecked);
}
之后,让您的活动实现该接口,并在方法onSwitchStateChanged中实现后台更改逻辑。
现在,在片段的onAttach()
方法中,执行以下操作(此示例使用静态编程语言):
override fun onAttach(context: Context?) {
super.onAttach(context)
if (context is MyCallback) {
myListener = context as MyCallback
}
else {
throw RuntimeException("Must implement MyCallback!")
}
}
其中myListener
是片段中的变量。
现在,在交换机上添加一个setoncheckedchangelister,如本答案中所述,并在其中使用回调。例如(在Java中):
mySwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
myListener.onSwitchStateChanged(isChecked);
}
});
使用Otto事件总线,简单易行
点击此链接
将此添加到您的依赖项
implementation compile 'com.squareup:otto:1.3.8'
创建活动或片段添加此活动或片段
Bus bus = new Bus();
您可以从活动或片段中发布这样的事件
bus.post(new AnswerAvailableEvent(42));
如果您想在片段位于前台或后台时获取事件,请订阅以下事件
@Subscribe public void answerAvailable(AnswerAvailableEvent event) {
// TODO: React to the event somehow!
}
不要忘记在onStart和onStop中注册和注销
@Override
protected void onStart(){
super.onStart();
bus.register(this);
}
@Override
protected void onStop(){
super.onStop();
bus.unregister(this);
}
使用回调接口在片段和活动之间进行通信
请参阅以下代码段:
public class YourFragment extends Fragment{
OnCallbackReceived mCallback;
// Implement this interface in your Activity.
public interface OnCallbackReceived {
public void Update(boolean state);
}
在你的片段中:
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallback = (OnCallbackReceived) activity;
} catch (ClassCastException e) {
}
}
// You can Call the event from fragment as mentioned below
// mCallback is the activity context.
mCallback.Update(switch.isChecked());
活动:
public class MainActivity extends Activity
implements YourFragment.OnCallbackReceived {
// Implemented method.
public override void Update(boolean state) {
// Update bg here
}
原件:
如何将数据从片段发送到活动
我有个错误 //类别2是片段
公共视图onCreateView(LayoutInflater inflater、ViewGroup容器、Bundle savedInstanceState){ 但是它崩溃了,错误日志如下所示: 是 我已经在中为添加了init,如下所示: 我的场景是: Activity1-->Activity1-->片段 Splash的XML如下所示: 我有两项活动。片段由activity2调用,我想改变Acti
问题内容: 从Activity中包含的RecyclerView的适配器中,我试图在按下RecyclerView的元素时启动一个片段,这是我现在的代码: 我测试了它是否启动了我创建的一些“测试活动”,所以我知道除了片段启动之外的所有功能都可以正常工作。 错误在这里: 我正在启动作为活动的Fragment,所以当我运行应用程序时,它崩溃了,并告诉我在清单中将MainFragment声明为活动。 如何从
我有两个活动,分别是家庭活动和沙拉菜单活动。主页活动包含七个片段,其中一个名为菜单类别的片段有四个图像,第一个图像下面的文本是沙拉菜单,当用户单击沙拉菜单时,将启动名为沙拉菜单活动的新活动。 我想,当用户点击后退按钮时,home活动必须开始,并且应该从启动salad菜单活动的相同片段开始,即home活动中的菜单类别片段。我希望每个活动都会发生这种情况,例如,如果用户从您的订单片段开始一个新的活动,
如何在成功提交数据时将数据从本地数据库刷新到RecyclerView?我使用应用程序上的选项卡。函数提交数据,如果成功,数据将存储在中。 关于的数据将在中显示。但是发生的情况是,我必须滑动,然后滑动到,然后滑动到我的上成功显示的新的数据。 主要活动: 一切都很顺利,只是希望表单提交的时候数据能显示出来,可以直接在第3页签上查看
问题内容: 我要在我的下一个Android项目中使用Retrofit 2.1.0。我想使用设计模式,因此为每个REST调用创建单独的类,即 IBalanceService.java BalanceRestClient.java BalanceActivity.java 如何通过onResponse()更新活动/片段中的UI? 附加信息: 最小SDK:19个 目标SDK:23个 使用OkHttp和g