2016-05-07 2 views
0

У меня есть NavigationDrawer, который показывает фрагменты в MainActivity при щелчке элемента меню.Пролистать вкладки с табуром внутри фрагмента

Один из этих фрагментов называется MainFragment, который использует TabHost для отображения вкладок. Вкладки - еще два фрагмента (FragmentOne и FragmentTwo).

Все работает, но я не могу кодировать функциональные возможности и эффекты, такие как вкладки WhatsApp. Я искал много примеров/обучающих программ, но все они показывают, как это сделать с активностью, и я не могу реализовать его с фрагментами. Я надеюсь, что вы можете мне помочь. Спасибо.

Только одному из моих фрагментов нужны вкладки.

MainFragment:

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTabHost; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.podtest.R; 

public class MainFragment extends Fragment { 

    private FragmentTabHost mTabHost; 

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

     mTabHost = new FragmentTabHost(getActivity()); 
     mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.fragment_main); 

     Bundle arg1 = new Bundle(); 
     arg1.putInt("Arg for Frag1", 1); 
     mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("Frag Tab1"), 
       FragmentOne.class, arg1); 

     Bundle arg2 = new Bundle(); 
     arg2.putInt("Arg for Frag2", 2); 
     mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("Frag Tab2"), 
       FragmentTwo.class, arg2); 

     return mTabHost; 

    } 
} 

MainActivity:

import android.support.v4.app.FragmentManager; 
    import android.os.Bundle; 
    import android.support.design.widget.FloatingActionButton; 
    import android.support.design.widget.Snackbar; 
    import android.view.View; 
    import android.support.design.widget.NavigationView; 
    import android.support.v4.view.GravityCompat; 
    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.Menu; 
    import android.view.MenuItem; 

    import com.podtest.fragments.ImportFragment; 
    import com.podtest.fragments.MainFragment; 

    public class MainActivity extends AppCompatActivity 
      implements NavigationView.OnNavigationItemSelectedListener { 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 

      FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
      fab.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
          .setAction("Action", null).show(); 
       } 
      }); 

      DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
      ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
      drawer.addDrawerListener(toggle); 
      toggle.syncState(); 

      NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
      navigationView.setNavigationItemSelectedListener(this); 

      FragmentManager fm = getSupportFragmentManager(); 
      fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit(); 
     } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 

     FragmentManager fm = getSupportFragmentManager(); 

     int id = item.getItemId(); 

     if (id == R.id.nav_camera) { 
      fm.beginTransaction().replace(R.id.content_frame, new MainFragment()).commit(); 
     } else if (id == R.id.nav_gallery) { 
      fm.beginTransaction().replace(R.id.content_frame, new ImportFragment()).commit(); 
     } else if (id == R.id.nav_slideshow) { 

     } else if (id == R.id.nav_manage) { 

     } else if (id == R.id.nav_share) { 

     } else if (id == R.id.nav_send) { 

     } 

     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
     return true; 
    } 
} 

ответ

0

Для функциональности салфетки вы бы лучше с помощью ViewPager спаренный с TabLayout. Оба они представлены в библиотеке поддержки дизайна.

Вы можете увидеть рабочий пример здесь: http://blog.grafixartist.com/material-design-tabs-with-android-design-support-library/

В приведенном выше примере находится в пределах деятельности, но я использовал аналогичный так

+0

Я пытался его. Я не могу возражать, как это сделать, можете ли вы объяснить? – Alan

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