将Checkbox输入从一个片段传递到另一个片段

时间:2018-08-12 05:58:27

标签: android

我在一个片段中有一个复选框列表(我们称其为FragmentA),并且我有一个活动,其中包含2个片段(FragmentB和C)。如果选中了一个复选框,我想在片段C中显示一条消息,说明已选中特定的复选框。我需要帮助,因为我不知道如何将(isChecked)从FragmentA传递到Fragment C。

FragmentA.java

 CB16.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB16.getId());
            if (CB16.isChecked()) {
                score = score + finalScore;
            } else if (!CB16.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });

    CB17.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB17.getId());
            if (CB17.isChecked()) {
                score = score + finalScore;
            } else if (!CB17.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });


    CB18.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB18.getId());
            if (CB18.isChecked()) {
                score = score + finalScore;
            } else if (!CB18.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });


    CB19.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB19.getId());
            if (CB19.isChecked()) {
                score = score + finalScore;
            } else if (!CB19.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });


    CB20.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB20.getId());
            if (CB20.isChecked()) {
                score = score + finalScore;
            } else if (!CB20.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });

    CB21.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB21.getId());
            if (CB21.isChecked()) {
                score = score + finalScore;
            } else if (!CB21.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });


    CB22.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int finalScore = Values.getInstance().updateScore(CB22.getId());
            if (CB22.isChecked()) {
                score = score + finalScore;
            } else if (!CB22.isChecked()) {
                score = score - finalScore;
                tv.setText(" " + score);
            }
        }
    });





    btnFragMale6.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            ((MainActivityMale)getActivity()).setViewPager(6);            }
    });






    return view;

}

该分数不会影响FragmentC。

包含片段B和C的活动

 FragmentB fragmentb = new FragmentB();
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.constraintLayout1,fragmentB,fragmentB.getTag())
            .commit();

    FragmentC fragmentc = new FragmentC();
    FragmentManager fragmentManagerrslt = getSupportFragmentManager();
    fragmentManagerC.beginTransaction()
            .replace(R.id.constraintLayout2,fragmentC,fragmentC.getTag())
            .commit();

FragmentC活动

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_fragment_c, container, false);
    Log.d(TAG, "onCreateView: started");


    return view;
}

1 个答案:

答案 0 :(得分:3)

您可以通过两种方式在活动和片段之间共享信息。一种是通过手动将它们作为参数传递给每个开关。第二个(听起来与您想要的最相似)是将复选框数据存储在共享首选项中。

将它们作为参数传递

由于您提到片段处于不同的活动中,因此您首先必须将参数(复选框值)传递给下一个活动,然后再将其传递给片段。

将参数传递给新活动的示例

将布尔值checkboxValue以及该复选框的唯一ID放入新的Intent

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putBoolean("key", checkboxValue); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

然后在新的Activity中获取ID:

Bundle b = getIntent().getExtras();
boolean checkboxValue = false; // or other values
if(b != null)
    value = b.getBoolean("key", false);

将参数传递给片段的示例

创建片段时,只需向其添加参数,如下所示:

Fragment f = new FragmentC();
Bundle b = new Bundle();
b.putBoolean("uniqueId", checkboxValue);
f.setArguments(b);

然后在您的FragmentTransaction

中使用该片段

稍后如onCreateonCreateView方法所示,将其从片段中删除:

Bundle args = getArguments();
int checkboxValue = args.getBoolean("uniqueId", false);

使用SharedPreferences

Shared Preferences是您的应用程序的全球数据存储。您可以在应用程序的任何部分放入和取出数据。放置数据的示例如下所示

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences()
SharedPreferences.Editor edit = prefs.edit()
edit.putBoolean("checkbox1", checkboxValue)
edit.apply()

当您想从应用程序的其他部分获取数据时,您可以这样做:

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences()
boolean checkboxValue = prefs.get("checkbox1", false)

这是在应用程序中存储全局设置的好方法!了解更多here

相关问题