android-fragments 如何将CheckBox状态从Activity传递到片段

ltskdhd1  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(178)

我的应用程序背景:

这是一款锻炼监测应用程序。

我想做的事:

如果用户点击复选框,则必须更新锻炼进度,例如

我想更新足够的TextView(在这种情况下是蹲)到当前水平。

我的应用程序目前的功能:

我有一个RecyclerView适配器用于练习活动。我已经设法保存了CheckBox的选中状态并检索了它。TinyDB只是一个库,我猜它类似于SharedPreferences。

课程开始时间:

public class ExercisesRecyclerView extends RecyclerView.Adapter<ExercisesRecyclerView.MyViewHolder>
{
    String[] data1, data2, videoURL;
    String exercise;
    int[] images;
    Context context;
    TinyDBManager tinyDB;

        public ExercisesRecyclerView(Context ct, String[] s1, String[] s2, String[] videoArray,
                                     String exerciseType) {
            context = ct;
            data1 = s1;
            data2 = s2;
            videoURL = videoArray;
            exercise = exerciseType;
            tinyDB = TinyDB.getInstance(context);
        }

用于保存CheckBox状态的代码:

holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                if(isChecked){

                    tinyDB.putBoolean("checkBox"+data2[position]+exercise, true);

                }else{
                    tinyDB.putBoolean("checkBox"+data2[position]+exercise, false);
                }
            }
        });

        TinyDBManager manager2 = TinyDB.getInstance(context);

        if(manager2.getBoolean("checkBox" + data2[position] + exercise, false)) {
            holder.checkBox.setChecked(true);
        }else{
            holder.checkBox.setChecked(false);
        }

练习活动:

public class exercises extends AppCompatActivity {

    String data1;
    RecyclerView recyclerView;
    String[] s1,s2,s3;
    int[] images = {R.drawable.squat,R.drawable.pull_up,R.drawable.handstand,R.drawable.leg_raises,
            R.drawable.push_up,R.drawable.dips,R.drawable.horizontal_pull,R.drawable.plank};
    ImageView goBackArrow;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_exercises);
        Objects.requireNonNull(getSupportActionBar()).hide();
        goBackArrow = findViewById(R.id.go_back_arrow2);
        data1 = getIntent().getStringExtra("data1");

        Log.d("IntentToExercises", "onCreate: " + data1);

        recyclerView = findViewById(R.id.exercisesRecyclerView);

        if(data1.equals("SQUATS")) {
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.SQUATS);
            s3 = getResources().getStringArray(R.array.SQUATS_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"squat");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        } else if(data1.equals("PULL UPS")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.PULL_UPS);
            s3 = getResources().getStringArray(R.array.PULL_UPS_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"pullup");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }else if(data1.equals("HANDSTAND PUSH UPS")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.HANDSTAND);
            s3 = getResources().getStringArray(R.array.HANDSTAND_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"handstand");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }else if(data1.equals("LEG RAISES")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.LEGRAISES);
            s3 = getResources().getStringArray(R.array.LEGRAISES_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"legraises");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }else if(data1.equals("PUSH UPS")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.PUSH_UPS);
            s3 = getResources().getStringArray(R.array.PUSH_UPS_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"pushups");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }else if(data1.equals("DIPS")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.DIPS);
            s3 = getResources().getStringArray(R.array.DIPS_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"dips");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }else if(data1.equals("HORIZONTAL PULLS")){
            s1 = getResources().getStringArray(R.array.LEVEL);
            s2 = getResources().getStringArray(R.array.HORIZONTAL_PULLS);
            s3 = getResources().getStringArray(R.array.HORIZONTAL_PULLS_VIDEOURL);
            ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                    s1,s2,s3,"horizontalpulls");
            recyclerView.setAdapter(exercisesRecyclerView);
            recyclerView.setLayoutManager(new LinearLayoutManager(this));
        }

我的猜测是,我必须为每个CheckBox分配索引,将所有数据添加到一个数组或数组列表中,然后将其传递给exercise progress片段,然后循环遍历该数组以找到最高索引,这将是用户当前所在的级别,但我不知道我的猜测是否正确。如果我的猜测是正确的,那么我可以以某种方式使用它,但我需要一些指导。

nfzehxib

nfzehxib1#

首先,我建议你在练习活动中使用代码重构,因为你有很多重复的代码,而且,用小写字母命名你的活动不是一个好的做法。
最后,从你的片段中,你可以访问包含你的示例的Activity。如果你在你的片段中将yourFragment.getActivity()转换为“exercises”,并在你的类中实现一个实现你想要的逻辑的方法,你的问题就会得到解决。
我希望我能帮上忙,如果我能在其他方面帮上忙,请让我知道
重构:如果你用s1,s2和s3创建一个类,那么在你的内部,如果你只是示例化那个对象,这样你的代码就会简单得多。

YourObject object = null
if (firstCase) {object = YourObject(LEVEL, "pushups", "ksajdfh");}
else if (secondCase) {object = YourObject(LEVEL, "run", "ksajdfh");}
......
ExercisesRecyclerView exercisesRecyclerView = new ExercisesRecyclerView(this,
                object.s1,object.s2,object.s3,object.s4);
        recyclerView.setAdapter(exercisesRecyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

相关问题