setText()和setProgress()未在ViewPager中更新



我的应用程序
使用ViewPagerFragements。每个Fragment示出具有CheckBoxesProgressBarTextViewListView。如果检查了6个CheckBoxes中的3个,则ProgressBarTextView应更新为3%。

问题
TextView和ProgressBar未正确显示更新。我记录了计算的进度值以及tv.getText()pb.getProgress()的值。有两个问题:

1.(进度值以及tv.getText()pb.getProgress()的值不平等。tv.getText()pb.getProgress()返回的值分别为总是3%过高或过低
(是的,我传递给setProgress((和setText((的值是正确的(

11-30 14:44:57.099 14230-14230/com.example..myapplication 
D/CheckBox: setProgressBar()
progress should be = 3%
progressBar is = 0%
progressText is = 0%
11-30 14:45:02.275 14230-14230/com.example..myapplication 
D/CheckBox: setProgressBar()
progress should be = 7%
progressBar is = 3%
progressText is = 3%

2.(TextViewProgressBar视图始终显示0%。

我试着修复了几个小时,但在StackOverflow上甚至找不到解决方案。怎么了?

碎片类

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable 
ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container, false);
progressBar = view.findViewById(R.id.progressBar);
progressText = view.findViewById(R.id.progressText);
lv = view.findViewById(R.id.list_view_nahrungsmittel);
dateTV = view.findViewById(R.id.changeDate);
leftBTN = view.findViewById(R.id.changeDateBTNLeft);
rightBTN = view.findViewById(R.id.changeDateBTNRight);
backToTodayBTN = view.findViewById(R.id.backToTodayBTN);
mDB = new DBHelper(getContext());  //hier oder main?
items = MainActivity.getList();
setBTN();
setBackToTodayButton();
setNumCheckedCB();
setDateTV();
setProgressBarFirstTime();
setListAdapter();
setListViewListener();
setButtons();
return view;
}
public void setProgressBar(int i) {
Log.d("CheckBox", "setProgressBar()");
progress = (int)(((float)i * 100f) / (float) MainActivity.getNumCB());
Log.d("CheckBox", "progress should be = " + progress + "%" );
Log.d("CheckBox", "progressBar is = " + progressBar.getProgress() + "%" );
Log.d("CheckBox", "progressText is = " + progressText.getText() );
progressBar.setProgress(progress);
progressText.setText(progress + "%");
}

ListAdapter
为ListView中的每个CheckBox设置Listener,它调用setProgressBar((方法。

//Click on CB
final DataHolder finalHolder1 = holder;
holder.cb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.isPressed()) {
buttonView.setChecked(isChecked);
//Update Progress
int i = 0;
boolean[] stateCheckBox = mDB.getCheckBoxState(date, item.getTitle());
if(isChecked){
if(finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE && finalHolder1.cb3.getVisibility() == View.VISIBLE ){
if(stateCheckBox[1] == false && stateCheckBox[2] ==false) { i = 3; }
else if (stateCheckBox[1] == false && stateCheckBox[2] ==true) { i = 2; }
else if (stateCheckBox[1] == true && stateCheckBox[2] ==true) { i = 1; }
}
else if (finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE) {
if (stateCheckBox[1] == false) { i = 2; }
else if (stateCheckBox[1] == true) { i = 1; }
}
else { i = 1; }
}
else { i = 1; }
updateNumCheckedCheckBoxes(date, isChecked, i);
//Update CB state
//Case1: Three CB in row, Left gets checked -> set all other right CB´s checked
if (isChecked) {
finalHolder1.cb2.setChecked(isChecked);
finalHolder1.cb3.setChecked(isChecked);
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, isChecked, isChecked);
} else {
if (finalHolder1.cb2.getVisibility() == View.GONE) {
//Case2: Only one Cb in row, uncheck
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, isChecked, isChecked);
} else if (finalHolder1.cb3.getVisibility() == View.GONE) {
//Case3: Two Cb in row, left gets unchecked
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, !isChecked, !isChecked);
} else {
//Case4: Three CB, left gets unchecked
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, !isChecked, !isChecked);
}
}
}
}
});
holder.cb2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.isPressed()) {
buttonView.setChecked(isChecked);
//Update Progress
int i = 0;
boolean[] stateCheckBox = mDB.getCheckBoxState(date, item.getTitle());
if(isChecked){
if(finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE && finalHolder1.cb3.getVisibility() == View.VISIBLE ){
if(stateCheckBox[2] ==false) { i = 2;}
else if (stateCheckBox[2] ==true) { i = 1;}
}
else if (finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE) { i = 1; }
}
else {
if(finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE && finalHolder1.cb3.getVisibility() == View.VISIBLE ){
if(stateCheckBox[0] ==false) { i = 1; }
else if (stateCheckBox[2] ==true) { i = 2; }
}
else if (finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE) {
if(stateCheckBox[0] == true) { i = 2; }
else if (stateCheckBox[0] == false) { i = 1;}
}
}
updateNumCheckedCheckBoxes(date, isChecked, i);
//Update CB state
//Case5: Second from the left CB gets checked -> set right CB checked
if (isChecked) {
finalHolder1.cb3.setChecked(isChecked);
mDB.updateCheckBoxState(date, item.getTitle(), !isChecked, isChecked, isChecked);
}
//Case6: Second from the left CB gets unchecked -> set left CB unchecked
else {
finalHolder1.cb1.setChecked(isChecked);
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, isChecked, !isChecked);
}
}
}
});
holder.cb3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(buttonView.isPressed()) {
buttonView.setChecked(isChecked);
//Update Progress
int i = 0;
boolean[] stateCheckBox = mDB.getCheckBoxState(date, item.getTitle());
if(isChecked){ i = 1; }
else {
if(finalHolder1.cb1.getVisibility() == View.VISIBLE && finalHolder1.cb2.getVisibility() == View.VISIBLE && finalHolder1.cb3.getVisibility() == View.VISIBLE ){
if(stateCheckBox[0] == false && stateCheckBox[1] == false) { i = 1; }
else if (stateCheckBox[0] == false && stateCheckBox[1] ==true) { i = 2; }
else if (stateCheckBox[0] == true && stateCheckBox[1] == true) { i = 3; }
}
}
updateNumCheckedCheckBoxes(date, isChecked, i);
//Update CB state
//Case5: Right CB gets unchecked -> set all other left CB´s unchecked
if (!isChecked) {
finalHolder1.cb2.setChecked(isChecked);
finalHolder1.cb1.setChecked(isChecked);
mDB.updateCheckBoxState(date, item.getTitle(), isChecked, isChecked, isChecked);
}
else {
//Case 6: 3CBs, only right CB gets checked
mDB.updateCheckBoxState(date, item.getTitle(), !isChecked, !isChecked, isChecked);
}
}
}
});
//Click on Image Button
holder.imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v){
Intent intent = new Intent(context , Statistic2Activity.class);
context.startActivity(intent);
}
});
}
private void updateNumCheckedCheckBoxes (String date, boolean isChecked, int i){
mDB.updateNumCheckedCheckBoxes(date, isChecked, i);
updateProgressBar(date);
}

在setProgressBar((方法中添加它修复了我的问题:

progressBar = view.findViewById(R.id.progressBar);
progressText = view.findViewById(R.id.progressText);

最新更新