Элемент в ViewPager исчезает и появляется снова при переходе обратно на страницу

#android #android-fragments #android-viewpager

#Android #android-фрагменты #android-viewpager

Вопрос:

Проблема

У меня есть ViewPager с 3 fragments . В одном из fragments у меня есть 2 Buttons , которые я setVisibility хочу VISIBLE . Здесь отображаются две кнопки. Проблема в том, что когда я провожу пальцем по другой странице, а затем возвращаюсь на страницу с кнопками, кнопки исчезают на долю секунды, а затем появляются снова.

Я не могу разобраться в этом, я бы хотел, чтобы кнопки отображались постоянно. Если это что-нибудь значит, у меня есть кнопки, нарисованные в XML-файле layout, для видимости которых установлено значение GONE . Если есть лучший способ сделать это, пожалуйста, дайте мне знать. Спасибо!


Фрагмент в коде вопроса

 @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_recycler, container, false);

    /* Removed unnecessary code */

    // If this is the Negative fragment then add the buttons
    if(VIEW_TYPE == Constants.TYPE_NEGATIVE) {
        LinearLayout buttonsLayout = view.findViewById(R.id.ButtonsLayout);
        buttonsLayout.setVisibility(View.VISIBLE);

        Button addButton = view.findViewById(R.id.addThought);
        addButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                addNewThought();
            }
        });

        Button remButton = view.findViewById(R.id.delThought);
        remButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                deleteLastThought();
            }
        });
    }
  

Код ViewPager

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    /*
        Set up the ViewPager. Finds its view, sets up the adapter (which sets up the associated
        pages), sets up the necessary settings for it to work appropriately, and sets up its
        page ticker
     */
    // Find the ViewPagers and TabLayouts view
    mViewPager = findViewById(R.id.ViewPager);
    TabLayout tabLayout = findViewById(R.id.tabDots);
    // Define the ViewPagers adapter
    mViewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
    // Keeping all tabs in memory to prevent refreshing view. ABSOLUTELY NEEDED
    mViewPager.setOffscreenPageLimit(ViewPagerAdapter.NUM_OF_TABS); // Equal to 3
    // Set ViewPagers adapter
    mViewPager.setAdapter(mViewPagerAdapter);
    // Set up TabLayout with View Pager
    tabLayout.setupWithViewPager(mViewPager, true);
}
  

Ответ №1:

Удалите видимость из xml-макета и в коде сделайте, как показано ниже:

Отредактировано

 if(VIEW_TYPE == Constants.TYPE_NEGATIVE) { 
LinearLayout buttonsLayout =     view.findViewById(R.id.ButtonsLayout);
buttonsLayout.setVisibility(View.VISIBLE);}else{
buttonLayout.setVisibility(View.GONE);}
  

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

1. Спасибо, я протестирую это, когда вернусь домой. Но это делает прямо противоположное тому, что я делаю. Не означает ли это, что у других моих фрагментов будет момент, когда они появятся, а затем исчезнут?