2017-02-21 3 views
1

Я хочу использовать snackbar для отображения сообщения в любой части приложения. Я имею в виду, когда Wi-Fi отключен, должна быть закуска, говорящая о отключении Wi-Fi. Это определяется в любой части приложения (любой фрагмент или любое действие). В настоящее время я определяю это в subfragment, где все фрагменты распространяются subfragment, а также я использую его в MainActivity. Это прекрасно работает. Проблема заключается в размещении координатора для snackbar. Как я могу дать это coordinator layout в каждом xml? Какое наилучшее возможное решение?Координатор для xml

ответ

2

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

public View getCoordinateLayout(Activity activity) { 
    ViewGroup vg = (ViewGroup) activity.findViewById(android.R.id.content); 
    ViewGroup root = (ViewGroup) vg.getChildAt(0); 
    int childCount = root.getChildCount(); 
    for(int i=0;i<childCount;i++){ 
     View view = root.getChildAt(i); 
     if(view instanceof CoordinatorLayout){ 
      return view; 
     } 
    } 
    return null; 
} 
+0

, где я должен добавить этот код? – MagdHo0506

+0

добавьте его в BaseActivity и BaseFragment, также вы можете сделать его статическим методом и вызвать его там, где вы хотите показать снэк-бар, передавая ему текущую активность @ MagdHo0506 –

2

Кажется, что вы хотите использовать родительскую структуру макета для всех ваших других макетов. Скажем, наш родительский компоновщик файл называется structure.xml, и это выглядит примерно так:

<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <FrameLayout 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</android.support.design.widget.CoordinatorLayout> 

Затем, когда вы создаете активности вы можете надуть свой обычный макет, скажем activity_main.xml, как это:

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

    setContentView(R.layout.structure); 
    LayoutInflater.from(this).inflate(R.layout.activity_main, (FrameLayout) findViewById(R.id.container), false); 
} 

И всякий раз, когда вы создаете фрагмент с вашей обычной компоновкой, скажу frag_main.xml, вы можете сделать это следующим образом:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) { 
    View view = inflater.inflate(R.layout.structure, group, false); 
    inflater.inflate(R.layout.frag_main, (FrameLayout) view.findViewById(R.id.container), false); 

    return view; 
} 

Так как вы ALR eady получил родительский класс для ваших фрагментов/действий, вы должны легко создать некоторые вспомогательные методы для всех ваших подклассов.

Надеюсь, это поможет.

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