2016-06-15 5 views
0

В настоящее время у меня есть MainActivity с 2 вкладками (с двумя фрагментами) и Navigation View с 3 пунктами меню. У меня сейчас только одно действие с вкладками. В MainActivity у меня есть инициализация панели инструментов, навигации, ViewPager, TabLayout. Также у меня есть один экземпляр адаптера, который создает фрагменты для вкладок.Фрагменты с TabLayout и ViewPager

Когда я выбираю один из элементов меню, я хочу, чтобы он открыл новый фрагмент с двумя другими вкладками (с двумя другими фрагментами).

Как это реализовать с помощью фрагментов? Или лучше использовать дополнительную активность?

NavigationView

MainActivity with two tabs

activity_main_xml:

<android.support.design.widget.CoordinatorLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 


     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      android:theme="@style/ThemeOverlay.AppCompat.Dark" 

      /> 

     <android.support.design.widget.TabLayout 
      android:id="@+id/tabLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 

      app:tabIndicatorColor="@android:color/white" 
      app:tabIndicatorHeight = "6dp" 

      app:tabSelectedTextColor="@android:color/white" 
      app:tabTextColor="@android:color/white" 
      /> 

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


    <android.support.v4.view.ViewPager 
     android:id="@+id/viewPager" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 

     /> 

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






<android.support.design.widget.NavigationView 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:id="@+id/navigationView" 
    android:layout_gravity="start" 
    app:headerLayout="@layout/navigation_header" 
    app:menu="@menu/menu_navigation" 

/> 

MainActivity:

package ru.alexbykov.sailesstat; 

import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.TabLayout; 
import android.support.v4.view.ViewPager; 
import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.MenuItem; 

import ru.alexbykov.sailesstat.statistic.adapter.TheSalesTabsFragmentAdapter; 

public class MainActivity extends AppCompatActivity { 


    private static final int LAYOUT = R.layout.activity_main; 

    DrawerLayout drawerLayout; 
    Toolbar toolbar; 
    ViewPager viewPager; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     setTheme(R.style.AppDefault); 
     super.onCreate(savedInstanceState); 
     setContentView(LAYOUT); 


     setupToolBar(); 
     setupNavigationView(); 
     setupTabs(); 


    } 

    private void setupToolBar() { 


     toolbar = (Toolbar) findViewById(R.id.toolbar); 
     toolbar.setTitle(R.string.app_name); 

    } 

    private void setupNavigationView() { 

     drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 

     ActionBarDrawerToggle togle = 
       new ActionBarDrawerToggle(
         this, 
         drawerLayout, 
         toolbar, 
         R.string.view_navigation_open, 
         R.string.view_navigation_close); 

//  drawerLayout.setDrawerListener(togle); 

     togle.syncState(); 


     NavigationView navigationView = (NavigationView) findViewById(R.id.navigationView); 

     navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { 
      @Override 
      public boolean onNavigationItemSelected(MenuItem item) { 


       drawerLayout.closeDrawers(); 

       switch (item.getItemId()) 
       { 


       } 




       return true; 
      } 
     }); 


    } 

/* private void startTendersFragment() { 


     fTrans = getSupportFragmentManager().beginTransaction();; 
     TendersFragment tendersFragment = new TendersFragment(); 

     fTrans 
       .add(R.id.frameLayout, tendersFragment) 
       .addToBackStack(null) 
       .commit(); 


    }*/ 




    private void setupTabs() { 


     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     TheSalesTabsFragmentAdapter adapter = new TheSalesTabsFragmentAdapter(this, getSupportFragmentManager()); 
     viewPager.setAdapter(adapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout); 
     tabLayout.setupWithViewPager(viewPager); 

    } 




} 

TheSalesTabsFragmentAdapter

package ru.alexbykov.sailesstat.statistic.adapter; 

import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

import java.util.HashMap; 
import java.util.Map; 

import ru.alexbykov.sailesstat.statistic.fragments.AbstractTabFragment; 
import ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale.ManagersFragment; 
import ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale.PlanFragment; 

/** 
* Created by Alexey on 09.06.2016. 
*/ 
public class TheSalesTabsFragmentAdapter extends FragmentPagerAdapter { 




    //for use strings 
    private Context context; 
    private Map<Integer, AbstractTabFragment> tabs; 



    public TheSalesTabsFragmentAdapter(Context context, FragmentManager fm) { 
     super(fm); 

     this.context = context; 
     initTabs(); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return tabs.get(position); 
    } 

    @Override 
    public int getCount() { 
     return tabs.size(); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 

     return tabs.get(position).getTitle(); 
    } 

    private void initTabs() { 

     tabs = new HashMap<>(); 

      tabs.put(0, PlanFragment.getInstance(context)); 
      tabs.put(1, ManagersFragment.getInstance(context)); 

    } 
} 

ManagersFragment

package ru.alexbykov.sailesstat.statistic.fragments; 


import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.view.View; 

public class AbstractTabFragment extends Fragment { 


    private String title; 
    protected Context context; 
    protected View view; 


    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setContext(Context context) { 

     this.context=context; 

    } 

    public String getTitle() { 
     return title; 
    } 
} 

PlanFragment

package ru.alexbykov.sailesstat.statistic.fragments.fragmentsTheSale; 


import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import ru.alexbykov.sailesstat.R; 
import ru.alexbykov.sailesstat.statistic.fragments.AbstractTabFragment; 

/** 
* A simple {@link Fragment} subclass. 
*/ 
public class PlanFragment extends AbstractTabFragment { 

    private static final int LAYOUT = R.layout.fragment_plan; 





    public static PlanFragment getInstance(Context context) { 


/*  Bundle bundle = new Bundle(); 
     fragment.setArguments(bundle);*/ 


     PlanFragment fragment = new PlanFragment(); 
     fragment.setContext(context); 
     fragment.setTitle(context.getString(R.string.tab_plan_stat_fragment)); 

     return fragment; 


    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 

     view = inflater.inflate(LAYOUT, container, false); 
     return view; 
    } 








} 

AbstractTabFragment

package ru.alexbykov.sailesstat.statistic.fragments; 


import android.content.Context; 
import android.support.v4.app.Fragment; 
import android.view.View; 

public class AbstractTabFragment extends Fragment { 


    private String title; 
    protected Context context; 
    protected View view; 


    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setContext(Context context) { 

     this.context=context; 

    } 

    public String getTitle() { 
     return title; 
    } 
} 
+0

Это может помочь http://www.gadgetsaint.com/android/create-viewpager-tabs-android/#.WPuppVN97BI – ASP

ответ

0

первых фрагментов не лучшая практика, когда, как и NavigationViews. Я бы рекомендовал кнопки для переключения действий без использования фрагментов. Если я понимаю, что вы правы, у вас есть главная страница с контентом, в которой я бы добавил три кнопки, каждая из которых имела намерение начать еще одно мероприятие в leiu NavigationView. Каждое из этих действий будет иметь свои собственные кнопки, которые приведут вас к любой деятельности, от которой вы хотите перейти оттуда.

+0

У меня есть главная страница с контентом (изображение 2). Эта страница создается, когда приложение запускается. Почему использование фрагментов и NavigationView не является хорошей практикой? –

+0

Да, это хорошо, вот где вы собираетесь запускать другие мероприятия. Фрагменты обычно используются только в том случае, если вы адаптируете приложение к телефону и планшету. В телефоне они полноэкранные, а на планшете они появляются в виде разрыва экрана (думаю, страницы настроек на Apple). Как правило, им труднее работать, поэтому общее мнение состоит в том, что они бессмысленны. NavigationViews просто воспринимаются как ленивая практика программирования, потому что ее легко вставить в нее множество опций и запутать пользователя (старый Spotify был этим, и они, наконец, переключились) –

+0

Спасибо за ответ. Но в любом случае я делаю это для учебы. Я хочу понять, как реализовать это, используя вкладки и фрагменты в одном фрагменте.(выбран пользователем в меню навигации) –

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