Обновление пользовательского интерфейса после изменения в базе данных происходит - PullRequest
0 голосов
/ 19 марта 2019

Я разрабатываю приложение в Android Studio, которое берет данные из RealtimeDatabase Firebase, и у меня есть следующий метод, я могу загрузить все данные при первом запуске, но когда я обновляю базу данных после того, как пользовательский интерфейс ничего не меняет:

ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            for(DataSnapshot ds : dataSnapshot.getChildren()) {

                MapModel shiftMap = ds.getValue(MapModel.class);

                ViewGroup linearLayout = findViewById(R.id.mapLayout);

                View cell = new View(MainActivity.this);

                GradientDrawable shape = new GradientDrawable();

                shape.setShape(GradientDrawable.RECTANGLE);

                //shape.setColor(Color.rgb(33,150,243));

                if (shiftMap.getOra00() ==1)
                {
                    shape.setColor(Color.rgb(33,150,243));
                }
                else if (shiftMap.getOra00() ==0.5)
                {
                    shape.setColor(Color.rgb(179,229,252));
                }
                else if (shiftMap.getOra00() ==0)
                {
                    shape.setColor(Color.rgb(255,255,255));
                }

                shape.setStroke(3, Color.rgb(255,255,255));

                shape.setCornerRadius(5);

                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);

                lp.setMargins(1, 1, 1, 1);

                cell.setLayoutParams(lp);

                cell.setBackground(shape);

                linearLayout.addView(cell);
                Log.i("Operator",  shiftMap.getOperator() + " | " + shiftMap.getOra00() + " | " + shiftMap.getOra01() + " | " + shiftMap.getOra02());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };

Есть идеи, что я делаю не так?

1 Ответ

0 голосов
/ 20 марта 2019

Проблема с моим кодом заключается в том, что каждый раз, когда база данных обновляется, она создает новые элементы управления в пользовательском интерфейсе.Мне удалось решить проблему, удалив каждый элемент управления, затем обновив интерфейс, и все в порядке.Ниже кода:

ValueEventListener eventListener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            ViewGroup linearLayout = findViewById(R.id.mapLayout);

            if(linearLayout.getChildCount() > 0)
                linearLayout.removeAllViews();

            for(DataSnapshot ds : dataSnapshot.getChildren()) {

                MapModel shiftMap = ds.getValue(MapModel.class);

                View cell = new View(MainActivity.this);

                GradientDrawable shape = new GradientDrawable();

                shape.setShape(GradientDrawable.RECTANGLE);

                //shape.setColor(Color.rgb(33,150,243));

                if (shiftMap.getOra00() == 1)
                {
                    shape.setColor(Color.rgb(33,150,243));
                }
                else if (shiftMap.getOra00() ==0.5)
                {
                    shape.setColor(Color.rgb(179,229,252));
                }
                else if (shiftMap.getOra00() ==0)
                {
                    shape.setColor(Color.rgb(255,255,255));
                }

                shape.setStroke(3, Color.rgb(255,255,255));

                shape.setCornerRadius(5);

                LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(70, 50);

                lp.setMargins(1, 1, 1, 1);

                cell.setLayoutParams(lp);

                cell.setBackground(shape);

                linearLayout.addView(cell);
                Log.i("Operator",  shiftMap.getOperator() + " | " + shiftMap.getOra00() + " | " + shiftMap.getOra01());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    };

код:

ViewGroup linearLayout = findViewById(R.id.mapLayout);

            if(linearLayout.getChildCount() > 0)
                linearLayout.removeAllViews();

удаляет все элементы управления внутри линейного макета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...