2015-07-31 2 views
0

У меня есть приложение, в котором я использую Single activity и различные фрагменты, скажем, при запуске активности. Я вызываю фрагмент A, а затем после ввода входов я переключаюсь на фрагмент B а затем фрагмент C.Как отключить и активировать кнопку переполнения на разных фрагментах

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

public static void setOverflowButtonColor(final Activity activity, final int i) { 
     final String overflowDescription = activity.getString(R.string.abc_action_menu_overflow_description); 
     final ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView(); 
     final ViewTreeObserver viewTreeObserver = decorView.getViewTreeObserver(); 
       viewTreeObserver.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
        @Override 
        public void onGlobalLayout() { 
         TintImageView overflow = null; 

         final ArrayList<View> outViews = new ArrayList<View>(); 
         decorView.findViewsWithText(outViews, overflowDescription, 
           View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION); 
         if (outViews.isEmpty()) { 
          return; 
         } 
         overflow = (TintImageView) outViews.get(0); 
         //overflow.setColorFilter(Color.CYAN); 
         overflow.setImageResource(R.drawable.my_overflow_image); 
         if (i == 1 && overflow!=null) { 
          overflow.setEnabled(false); 
          overflow.setVisibility(View.GONE); 
         } else if (overflow != null) { 

          overflow.setEnabled(true); 
          overflow.setVisibility(View.VISIBLE); 
         } 

         overflow.setOnClickListener(new View.OnClickListener() { 
          @Override 
          public void onClick(View v) { 
           Toast.makeText(activity, "Overflow", Toast.LENGTH_SHORT).show(); 
          } 
         }); 
         removeOnGlobalLayoutListener(decorView, this); 
        } 
       }); 
    } 
    public static void removeOnGlobalLayoutListener(View v, ViewTreeObserver.OnGlobalLayoutListener listener) { 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) { 
      v.getViewTreeObserver().removeGlobalOnLayoutListener(listener); 
     } 
     else { 
      v.getViewTreeObserver().removeOnGlobalLayoutListener(listener); 
     } 
    } 

Так из фрагмента А я посылаю 1 в параметре так, чтобы скрыть значок, но от активности B Посылает 0 в параметре снова видно, но он не получает вызов.

Позвольте мне сказать вам, что эта функция работает, когда она вызывается из фрагмента A, я имею в виду, что она вызывает одно время, но не 2-е время или около того.

скажите, пожалуйста, как это сделать, если вы знаете какой-либо другой лучший метод

ответ

0

Определить интерфейс, как показано ниже.

public interface FragmentHost{ 
     public void onFragmentChange(int currentFragment); 
    } 

Деятельность A должна реализовывать этот интерфейс.

class A extends Activity implents FragmentHost { 

public static final int FRAGMENT_B = 0; 
public static final int FRAGMENT_C = 1; 

@Override 
public void onFragmentChange(int currentFragment) { 

if (currentFragment == FRAGMENT_A) { 
// enable or disable button 
} else if(currentFragment == FRAGMENT_B) { 
// enable or disable button 
} 
} 

} 

И в каждом фрагменте. Функция OnResume вызывает метод onFragmentChange() и передает идентификатор фрагмента.

class B extends Fragment { 

@Override 
public void onResume() { 
((FragmentHost) getParentActivity()).onFragmentChange(A.FRAGMENT_B); 
} 

} 
Смежные вопросы