我的应用程序背景:
这是一款锻炼监测应用程序。
我想做的事:
如果用户点击复选框,则必须更新锻炼进度,例如
我想更新足够的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片段,然后循环遍历该数组以找到最高索引,这将是用户当前所在的级别,但我不知道我的猜测是否正确。如果我的猜测是正确的,那么我可以以某种方式使用它,但我需要一些指导。
1条答案
按热度按时间nfzehxib1#
首先,我建议你在练习活动中使用代码重构,因为你有很多重复的代码,而且,用小写字母命名你的活动不是一个好的做法。
最后,从你的片段中,你可以访问包含你的示例的Activity。如果你在你的片段中将yourFragment.getActivity()转换为“exercises”,并在你的类中实现一个实现你想要的逻辑的方法,你的问题就会得到解决。
我希望我能帮上忙,如果我能在其他方面帮上忙,请让我知道
重构:如果你用s1,s2和s3创建一个类,那么在你的内部,如果你只是示例化那个对象,这样你的代码就会简单得多。