当前位置: 首页 > 知识库问答 >
问题:

set文本() 和 set进程 () 未在视图页程序中更新

章景同
2023-03-14

我的应用程序
使用ViewPagerFrahtml" target="_blank">gements。每个片段都显示一个ListView,其中包含CheckBox、一个ProgressBar和一个TextView。如果6个CheckBox中有3个被检查,则ProgressBarTextView应更新为3%。

问题
文本视图和进度条无法正确显示更新。我记录了计算的进度值以及 tv. 有两个问题:

1.)进度值与< code>tv.getText()和< code>pb.getProgress()的值不相等。< code>tv.getText()和< code>pb.getProgress()返回的值总是高或低3%。< br >(是的,我传递给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.) 文本视图进度条视图始终显示 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 + "%");
}

列表视图
为列表视图中的每个复选框设置侦听器,这将调用 set 进程栏() 方法。

//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);

}

共有1个答案

咸利
2023-03-14

将其添加到setProgressBar()方法中修复了我的问题:

progressBar = view.findViewById(R.id.progressBar);
progressText = view.findViewById(R.id.progressText);
 类似资料:
  • 问题内容: 我正在尝试使用MongoDB的Java驱动程序在同一操作中对记录进行两次更新($ set和$ push)。我正在使用类似于以下代码: 当我通过BasicDBList将$ set和$ push合并到同一更新中时,我得到一个IllegalArgumentException:“存储在db中的字段不能以’$’开头(错误键:’$ push’)”。 如果我进行两个单独的更新,则pushUpdate

  • 上一篇文章出现了个明显的知识点错误,不过感谢有个网友的提出,及时进行了修改。也希望各位多多包涵。 注:(2019年09月01日15:28:00) 在修改文章的时候,发现自己两年前写的像屎一样, 忍不住还在群里吐槽一番。 目录

  • JavaScript的默认对象表示方式{}可以视为其他语言中的Map或Dictionary的数据结构,即一组键值对。 但是JavaScript的对象有个小问题,就是键必须是字符串。但实际上Number或者其他数据类型作为键也是非常合理的。 为了解决这个问题,最新的ES6规范引入了新的数据类型Map。要测试你的浏览器是否支持ES6规范,请执行以下代码,如果浏览器报ReferenceError错误,那

  • 问题内容: 有没有一种方法可以通过它的Java驱动程序修改MongoDb中某个键的值。我尝试了以下方法: 但是这两个功能完全用更新的文档替换了查询的文档。在mongo shell中使用$ set的情况下,仅更新特定键值之一的方法是什么(除了制作一个完全复制了所有字段并且更新了一个字段的全新Document)。 问题答案: 尝试这样的事情: 还要看这个例子。

  • 使用有什么区别吗: 从bash手册页上可以看出,它们是相同的,唯一的区别是,从用户角度来看,第二种格式更明确。

  • 我有下面一行代码: 但是,编译器会发出警告: scala.collection中任何类型模式的非变量类型参数。Set[Any]未选中,因为它通过擦除[warn]消除 很公平。 所以我把我的台词改成这样: 现在我得到一个错误: 找到[错误]:scala.collection.Set[_] [错误] 必需:scala.collection.Set[Any] 这两者有什么区别? 然后我将代码更改为以下内