1

В моем приложении Android у меня есть ViewPager с некоторыми фрагментами. Я хотел использовать и показывать меню кругового плавающего действия в одном из этих фрагментов, но FAB каким-то образом видимым во всех фрагментах. Как решить эту проблему и показать FAB только в одном фрагменте. Кстати, что библиотека: githubCircularFloatingActionMenu in Fragment ViewPager

Fragment.java

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     //Floating Action Button 
     //Create a button to attach the menu 
     ImageView movieFAB = new ImageView(getActivity()); 
     movieFAB.setImageResource(R.drawable.ic_launcher); 

     //Create menu items 
     FloatingActionButton actionButton = new FloatingActionButton.Builder(getActivity()).setContentView(movieFAB).build(); 
     ImageView iconSortName = new ImageView(getActivity()); 
     iconSortName.setImageResource(R.drawable.icon_star); 
     ImageView iconSortDate = new ImageView(getActivity()); 
     iconSortDate.setImageResource(R.drawable.icon_cloud); 
     ImageView iconSortRatings = new ImageView(getActivity()); 
     iconSortRatings.setImageResource(R.drawable.icon_communication); 

     SubActionButton.Builder itemBuilder = new SubActionButton.Builder(getActivity()); 
     SubActionButton buttonSortName = itemBuilder.setContentView(iconSortName).build(); 
     SubActionButton buttonSortDate = itemBuilder.setContentView(iconSortDate).build(); 
     SubActionButton buttonSortRatings = itemBuilder.setContentView(iconSortRatings).build(); 

     //Create the menu with the items 
     FloatingActionMenu actionMenu = new FloatingActionMenu.Builder(getActivity()) 
       .addSubActionView(buttonSortName) 
       .addSubActionView(buttonSortDate) 
       .addSubActionView(buttonSortRatings) 
       .attachTo(actionButton) 
       .build(); 
    } 

Спасибо за любую помощь!

ответ

1

Создать реализацию OnPageChangeListener где переопределить метод onPageSelected.

@Override 
public void onPageSelected(int position) { 
    if (position == VALID_POSITION) { 
     fabMenu.setVisibility(View.GONE); 
    } else { 
     fabMenu.setVisibility(View.VISIBLE); 
    } 
} 

Затем установите его в ViewPager

pager.setOnPageChangeListener(....); 

Я надеюсь, что это помогает вам

+0

Спасибо, хорошая идея! Пасибі. Вы знаете, я хочу добавить один эффект, может быть, вы знаете, как его добавить. Позвольте мне попытаться объяснить это вам. Когда пользователь srcoll, который фрагментирует FAB, уходит вправо, как здесь. https://github.com/shell-software/fab/blob/master/demo/animation_jump_from_right_jump_to_right.gif?raw=true У вас есть идеи, как это сделать? –

0

Это точно, как мой OnPageChangeListener настроен. Я сделал именно то, что сделал @ Eldar Mensutov, но также обязательно спрятал кнопки! В моем конкретном случае ниже я хотел, чтобы меню отображалось на моем втором фрагменте (pageNumber == 1) и скрывалось для каждого другого фрагмента:

  mViewPager.setOnPageChangeListener(new OnPageChangeListener() { 

       @Override 
       public void onPageSelected(int pageNumber) { 
        if (pageNumber == 1) { 
         actionButton.setVisibility(View.VISIBLE); 
         button2.setVisibility(View.VISIBLE); 
         button3.setVisibility(View.VISIBLE); 
         button4.setVisibility(View.VISIBLE); 
         button5.setVisibility(View.VISIBLE); 
        } else { 
         actionButton.setVisibility(View.GONE); 
         button2.setVisibility(View.GONE); 
         button3.setVisibility(View.GONE); 
         button4.setVisibility(View.GONE); 
         button5.setVisibility(View.GONE); 
        } 
        if(pageNumber == 0) { 
         TextView textElement = (TextView) findViewById(R.id.title); 
         textElement.setText("Fragment 1 Title"); 

         // Do stuff here 

        } 
        if(pageNumber == 1) { 
         TextView textElement = (TextView) findViewById(R.id.title); 
         textElement.setText("Fragment 2 Title"); 

         // Do stuff here 

        } 
        else if(pageNumber == 2) { 
         TextView textElement = (TextView) findViewById(R.id.title); 
         textElement.setText("Fragment 3 Title"); 

         // Do stuff here 

        } 

        else if(pageNumber == 3) { 
         TextView textElement = (TextView) findViewById(R.id.title); 
         textElement.setText("Fragment 4 Title"); 

         // Do stuff here 

        } 
       }  
      }