1

Je souhaite créer une application avec navigationDrawer, TabHost et ViewPager. Je veux soutenir de API 8. J'ajoute ce que j'ai accompli jusqu'ici. Vous obtenez maintenant une erreur lorsque vous décommentez les instructions commentées dans l'activité principale. Comment puis-je résoudre ça? Y a-t-il une autre façon de faire cela?Comment ajouter une barre d'outils et une barre d'outils dans une seule activité?

MainActivity.java

import android.os.Bundle; 
import android.support.design.widget.NavigationView; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.GravityCompat; 
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; 

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,android.support.v7.app.ActionBar.TabListener { 
    ViewPager viewPager; 
    private android.support.v7.app.ActionBar actionBar; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     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.setDrawerListener(toggle); 
     toggle.syncState(); 
     NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); 
     navigationView.setNavigationItemSelectedListener(this); 
     viewPager = (ViewPager) findViewById(R.id.pager); 
     FragmentManager fragmnetManager = getSupportFragmentManager(); 
     viewPager.setAdapter(new MyAdapter(fragmnetManager)); 
     viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { 
      @Override 
      public void onPageSelected(int pos) { 
       actionBar.setSelectedNavigationItem(pos); 
      } 
      @Override 
      public void onPageScrolled(int arg0, float arg1, int arg2) { 
      } 
      @Override 
      public void onPageScrollStateChanged(int arg0) { 
      } 
     }); 
//  actionBar = getSupportActionBar(); 
//  actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
//  android.support.v7.app.ActionBar.Tab tab1 = actionBar.newTab(); 
//  tab1.setText("TABONE"); 
//  tab1.setTabListener(this); 
//  android.support.v7.app.ActionBar.Tab tab2 = actionBar.newTab(); 
//  tab2.setText("TABTWO"); 
//  tab2.setTabListener(this); 
//  actionBar.addTab(tab1); 
//  actionBar.addTab(tab2); 
    } 
    @Override 
    public void onTabReselected(android.support.v7.app.ActionBar.Tab arg0, FragmentTransaction arg1) { 
    } 
    @Override 
    public void onTabSelected(android.support.v7.app.ActionBar.Tab tab, FragmentTransaction arg1) { 
     viewPager.setCurrentItem(tab.getPosition()); 
    } 
    @Override 
    public void onTabUnselected(android.support.v7.app.ActionBar.Tab arg0, FragmentTransaction arg1) { 
    } 
    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 
    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     int id = item.getItemId(); 

     if (id == R.id.nav_camara) { 
     } else if (id == R.id.nav_gallery) { 
     } 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; 
    } 
} 
class MyAdapter extends FragmentPagerAdapter { 
    public MyAdapter(FragmentManager fm) { 
     super(fm); 
    } 
    @Override 
    public Fragment getItem(int i) { 
     Fragment fragment = null; 
     if (i == 0) { 
      fragment = new FragmentOne(); 
     } 
     if (i == 1) { 
      fragment = new FragmentTwo(); 
     } 
     return fragment; 
    } 
    @Override 
    public int getCount() { 
     return 2; 
    } 
} 

FragmentOne.java

import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 

public class FragmentOne extends Fragment {  
    public FragmentOne() { 
    } 

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

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.fragment_one_layout, container, false); 
     return view; 
    } 

} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <include 
     layout="@layout/app_bar_main" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 

</android.support.v4.widget.DrawerLayout> 

app_bar_main.xml

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.AppBarLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary" 
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

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

    <include layout="@layout/content_main" /> 

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

content_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context=".MainActivity" 
    tools:showIn="@layout/app_bar_main"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 
</RelativeLayout> 

Quand je décommenter les déclarations commentaires, il provoque une étroite force. Erreur est cette configuration de l'onglet ne peut pas être appliquée, je suppose que c'est parce que, en utilisant la barre d'action et la barre d'outils dans la même activité. Comment puis-je résoudre ça? Existe-t-il des méthodes alternatives pour y arriver?

Répondre

1

Vos méthodes que vous appelez pour les onglets de la barre d'action sont obsolètes et ne fonctionneront pas dans une barre d'outils. Utilisez TabLayout de la bibliothèque de conception à la place.

1

Utilisez la bibliothèque de designs de google.