Android: скрытие линейного описания и отображение других элементов макета смешиваются вместе

#android #google-maps #android-linearlayout

#Android #google-карты #android-linearlayout

Вопрос:

У меня есть этот код:

 Button go_back_maps = (Button)findViewById(R.id.Button02);
go_back_maps.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        slide_down Fx = new slide_down();
        setts.setVisibility(View.GONE);
        Fx.slide_up(Awake.this, setts);
        pick.setVisibility(View.VISIBLE);
        Fx.slide_down(Awake.this, pick);

    }
});
  

В основном это:
Два макета, Map и MapSettings, когда пользователь устанавливает маркер в макете карты и нажимает продолжить, скрывается макет карты с анимацией сдвига вверх и отображается макет MapSettings с анимацией сдвига вниз.

Моя проблема в том, что когда пользователь нажимает «Вернуться», он снова открывает карту, а когда пользователь нажимает на карту, чтобы изменить маркер — он реагирует на кнопки макета MapSettings, что делает невозможным изменение маркера или взаимодействие с картой.

В чем проблема? Эти строки являются единственными строками кода, которые отвечают за переключение между map и mapsettings.

Есть ли какой-нибудь способ перезагрузить макет или что-то в этомроде?

Кстати, вот класс эффектов:

     public static void slide_down(Context ctx, View v){
    Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_down);
    if(a != null){
    a.reset();
    if(v != null){
    v.clearAnimation();
    v.startAnimation(a);
    }
    }
    }

    public static void slide_up(Context ctx, View v){
        Animation a = AnimationUtils.loadAnimation(ctx, R.anim.slide_up);
        if(a != null){
        a.reset();
        if(v != null){
        v.clearAnimation();
        v.startAnimation(a);
        }
        }
        }

}
  

Комментарии:

1. Ваше предложение, в котором вы заявляете «Моя проблема в том, что Когда пользователь …», другим трудно понять. Пожалуйста, объясните это более подробно. Лучше предоставить слишком много деталей и констатировать очевидное, чем недостаточно.

Ответ №1:

Ваше описание проблемы немного сложно для понимания.

Однако, что касается вашего вопроса:

«Есть ли какой-нибудь способ перезагрузить макет или что-то в этомроде?»

Вот несколько вещей, которые следует учитывать:

1) Вы можете настроить макет для действия с помощью setContentView(R.layout.my_layout) , но имейте в виду, что многократный вызов setContentView() в ходе действия сопряжен с рядом подводных камней, которые могут сбить вас с толку. Все ссылки, которые вы сохраняете на представления в предыдущем макете, необходимо будет сбросить, и для безопасности вам следует полностью удалить все существующие представления, прежде чем раздувать новый.

2) Вы можете сделать макет недействительным, в результате чего он будет отрисован заново.

 ViewGroup vg = findViewById (R.id.my_layout);
vg.invalidate();