【问题标题】:Passing checkbox input from one fragment to another fragment in the same activity将复选框输入从一个片段传递到同一活动中的另一个片段
【发布时间】:2020-07-03 20:27:37
【问题描述】:

我有带有复选框的片段 A 和带有 EditText 的片段 B 要写入。

当 Fragment A 复选框被选中时,我想禁用 Fragment B 的 Edittext。

Y 尝试使用共享首选项,但它并没有禁用任何内容。

在片段 A 中:

CheckBox.setChecked(client.getUCheckbox);

CheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean b) {
            if (b){       
             
                SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = sharedPref.edit();
                edit.putBoolean("CheckBox", true);
                edit.apply();
            }

在片段 B 中:

 public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    realm = Realm.getDefaultInstance();
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    sharedPref.getBoolean("Checkbox",false);

}

 @Override
public View onCreateView(
        @NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View root = inflater.inflate(R.layout.fragment_determinaciones_parte_aguas, container, false);
    ButterKnife.bind(this, root);

    rellenarVista();

    return root;
}

 private void rellenarVista() {
    SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
    sharedPref.getBoolean("CheckBox",false);

    if (CheckBox){
        disableEditText();
    }

disableEditText 是一种将所有 editText 的 enable 设置为 false 的方法。

我尝试的解决方案来自这篇文章。

Passing Checkbox input from one fragment to another

提前谢谢你。

【问题讨论】:

标签: java android android-fragments


【解决方案1】:

编辑:您的disableEditText(); 方法仅在片段B 的onCreateView() 中调用一次,当片段创建时。您应该将片段 B 的引用传递给片段 A(或父活动)并直接在片段 A 的onCheckedChanged()中更新复选框@

您使用的首选项对于请求活动是私有的。

您需要将布尔值存储在可从两个活动访问的首选项中。而不是

SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);

你可以使用:

SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

注意:如果未选中复选框,您的 onCheckedChanged() 实现不会更新标志。这是一个修复:

public void onCheckedChanged(CompoundButton buttonView, boolean b) {

    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor edit = sharedPref.edit();
    edit.putBoolean("CheckBox", b);
    edit.apply();
}

【讨论】:

  • 感谢您的详细回答,但它不起作用,我可以分配一个真值,而另一个片段禁用 EditText,但我无法在执行时使用复选框输入来执行此任务。跨度>
  • 那是因为你的 disableEditText();方法只在片段 B 的 onCreateView() 中调用一次,当片段创建时。您应该将片段 B 的引用传递给片段 A(或父活动)并直接在片段 A 的 onCheckedChanged() 中更新复选框
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 2016-06-12
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多