Horizo​​ntalscrollview:从另一个活动返回时,imageView消失

时间:2019-11-11 12:18:03

标签: java android imageview android-linearlayout horizontalscrollview

我正在开发自己的第一个应用程序,但ImageViews和Horizo​​ntalscrollview遇到问题:我想收集用户在Horizo​​ntalscrollview中添加图像(达到目标->显示新图像)所达到的所有目标。

how 4 completed goals are displayed

它们正常显示,并且一切似乎正常,但是当我打开另一个活动然后又回来时,它们消失了。我试图使布局无效,但是什么也没有,我是否缺少任何东西?

先谢谢您!

这是我的XML文件

<!-- language: lang-xml -->
<?xml version="1.0" encoding="utf-8"?>
                <androidx.coordinatorlayout.widget.CoordinatorLayout
                xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                xmlns:tools="http://schemas.android.com/tools"
                android:id="@+id/layout3"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".Main3Activity">

                <HorizontalScrollView
                    android:id="@+id/horizontal_scroll"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="300dp">

                    <LinearLayout
                        android:id="@+id/linear"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal" >

                    </LinearLayout>

                </HorizontalScrollView>

            </androidx.coordinatorlayout.widget.CoordinatorLayout> 

这是我的Java代码 我用来检查目标是否完成的功能:

<!-- language: lang-java -->   
 protected void checkGoal(){

            int progress = calculateProgress();

            if(goalPref.getInt("Goal",0)!=0){

                if(progress >= goalPref.getInt("Goal", 0)) {
                    int id = layout.getChildCount();
                    addNewImage(id); // <-- here I add the image

                    question.setText(R.string.setgoal);

                    updateGoalPref(0);

                    if (list.size() != 0) {
                        list = new ArrayList<>();
                    }

                    updateProgress();


                }

            }
        }

我用来添加图像的功能:

<!-- language: lang-java -->   
            protected void addNewImage(int id){

                ImageView imageView = new ImageView(this);
                imageView.setId(id);
                imageView.setPadding(2, 2, 2, 2);
                imageView.setBackgroundResource(R.drawable.check);
                imageView.setScaleType(ImageView.ScaleType.FIT_XY);
                layout.addView(imageView, id);

            }

2 个答案:

答案 0 :(得分:0)

当您转到另一项活动并回来时,应在onResume中调用addNewImage以再次显示图像:

@Override
    protected void onResume() {
        super.onResume();
        addNewImage(id);
    }  

如果活动中的目标数量有限,为什么不使用XML创建这些ImageView并在Java中设置其可见性?

答案 1 :(得分:0)

由于我很固执,所以我设法找到了另一种方法,这就是我所做的:使用我发布的代码,我添加了一个计数器来跟踪用户达到了多少目标以及{{1} }我显示的图像与计数器值一样多。

通过这种方式,用户可以立即看到达到目标的效果,并且活动不会丢失任何东西。

然后,我实现了它以显示目标的描述,以这些图像为背景,在TextViews中更改了ImageViews。我没有使用计数器,而是将要显示的字符串保存在ArrayList中,并将其大小用作计数器。

希望对某人有用!

onResume()