代码之家  ›  专栏  ›  技术社区  ›  EagerToLearn

旋转或调整大小时,ProgressBar的进度显示错误

  •  0
  • EagerToLearn  · 技术社区  · 7 年前

    我在用 ProgressBar

    onCreate 再次调用的方法(旋转、调整大小..),则 进度条 的进度显示变得很奇怪。

    我调试了代码,但一切正常,setMax()和setProgress()的值也正确。

    首次加载:

    enter image description here

    调整屏幕大小:

    enter image description here

    方法:

    @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_practice_type_list);
    
            LayoutInflater inflater = (LayoutInflater) this.getSystemService(this.LAYOUT_INFLATER_SERVICE);
    
            Bundle b = getIntent().getExtras();
            int practiceType = b.getInt("practiceType");
            int level = b.getInt("level");
    
            DatabaseAccess databaseAccess = DatabaseAccess.getInstance(this);
            databaseAccess.open();
            ArrayList<BookInfoByTypeModel> bookInfo = databaseAccess.getBookInfoByType(level, practiceType);
            databaseAccess.close();
    
            ScrollView scrollView = (ScrollView)findViewById(R.id.practice_type_layout_scrollview);
            LinearLayout topParent = new LinearLayout(this);
            LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
            params.gravity = Gravity.CENTER;
    
            topParent.setLayoutParams(params);
            topParent.setOrientation(LinearLayout.VERTICAL);
    
            View viewTypeItem;
            TextView tvTypeThumbnail;
            TextView tvTypeName;
            TextView tvTypeCount;
            ProgressBar pbTypeProgressPercent;
            TextView tvTypeProgressText;
    
            for (int i = 0; i < bookInfo.size(); i++) {
                BookInfoByTypeModel book = bookInfo.get(i);
    
                viewTypeItem = inflater.inflate(R.layout.type_item, scrollView, false);
                tvTypeThumbnail = (TextView) viewTypeItem.findViewById(R.id.type_thumbnail);
                tvTypeName = (TextView) viewTypeItem.findViewById(R.id.type_name);
                tvTypeCount = (TextView) viewTypeItem.findViewById(R.id.type_count);
                pbTypeProgressPercent = (ProgressBar) viewTypeItem.findViewById(R.id.type_progress_percent);
                tvTypeProgressText = (TextView) viewTypeItem.findViewById(R.id.type_progress_text);
    
                switch (book.getType()){
                    case 0:
                        tvTypeThumbnail.setText("字");
                        tvTypeName.setText("漢字・語彙");
                        break;
                    case 1:
                        tvTypeThumbnail.setText("æ¼¢");
                        tvTypeName.setText("漢字");
                        break;
                    case 2:
                        tvTypeThumbnail.setText("語");
                        tvTypeName.setText("語彙");
                        break;
                    case 3:
                        tvTypeThumbnail.setText("文");
                        tvTypeName.setText("文法");
                        break;
                    case 4:
                        tvTypeThumbnail.setText("読");
                        tvTypeName.setText("読解");
                        break;
                    case 5:
                        tvTypeThumbnail.setText("聴");
                        tvTypeName.setText("聴解");
                        break;
                    case 6:
                        tvTypeThumbnail.setText("総");
                        tvTypeName.setText("総合");
                        break;
                }
    
                tvTypeCount.setText("問題集数:" + book.getBookCount());
                tvTypeProgressText.setText(book.getProgressCount() + "/" + book.getBookCount());
                pbTypeProgressPercent.setMax(book.getBookCount());
                pbTypeProgressPercent.setProgress(book.getProgressCount());
                topParent.addView(viewTypeItem);
            }
    
            scrollView.addView(topParent);
        }
    

    1 回复  |  直到 7 年前
        1
  •  1
  •   Pawel    7 年前

    您正在将多个具有相同ID的视图扩展到布局中。通常视图会自动恢复其状态,但在这种情况下,状态会被布局中具有给定ID的“last”视图覆盖,因此所有视图(具有该特定ID)最终都会从中“恢复”,从而导致保存状态损坏。

    状态恢复正在发生(超级) onRestoreInstanceState onCreate ,这就是您在那里设置的值丢失的原因。

    setSaveEnabled(false)