2016-01-19 24 views
13

Chcę ustawić pasek narzędzi na mojej aktywności, która rozszerza FragmentActivity. Wiem, że dla użycia metody setSuppoertActionBar(toolbar) rozszerzamy AppCompatActivity zamiast FragmentActivity, ale przesłonię metodę onMenuItemSelected(int featureId, MenuItem item), która jest ostateczna w AppCompatActivity i ostateczna metoda nie może przesłonić. więc jestem ograniczony do przedłużenia FragmentActivity.jak ustawić pasek narzędzi na FragmentActivity?

Oto mój kod:

public class MainActivity extends FragmentActivity 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); -> error is here 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) 
    { 
     // Inflate the menu 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onMenuItemSelected(int featureId, MenuItem item) { 
     switch(item.getItemId()){ 
      case R.id.action_search: 
       onSearchRequested(); 
       break; 
     } 
     return super.onMenuItemSelected(featureId, item); 
    } 

Widziałem wiele odpowiedzi związane z tym pytaniem, ale każdy mówi rozciąga AppCompatActivity zamiast FragmentActivity ale chcę ustawić pasek narzędzi, a także wymuszenia onMenuItemSelected(int featureId, MenuItem item) metody.

co powinienem zrobić, proszę o pomoc.

+4

Próbowałem już 'onOptionsItemSelected' jeszcze? – Shvet

+1

Tak, rozumiem, znalazłem rozwiązanie według twojej sugestii. Rozszerzam AppCompatActivity zamiast FragmentActivity i zmieniam metodę onMenuItemSelected() za pomocą metody onOptionsItemSelected(). dzięki :) –

Odpowiedz

5

użycie tego: -

toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowTitleEnabled(false); 

następnie wykorzystać tę jedną: -

@Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 

     sfm = getSupportFragmentManager(); 
     Fragment fragment = new Fragment(); 
     int id = item.getItemId(); 

     if (id == R.id.nav_sales) { 
      fragment = new SalesFragment(); 
      toolbar.setTitle("Sales"); 
     } 
1

Można również tworzyć własne toolbar:

najpierw skonfigurować główny temat przedłużyć Theme.AppCompat.Light.NoActionBar

<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 

</style> 

Pamiętaj, aby zastosować motyw:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.setTheme(R.style.style_1); 
    // ... 
} 

następnie w xml twoi Activity „s można ustawić swój własny toolbar:

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

gdzie @layout/my_toolbar może wyglądać następująco:

<android.support.v7.widget.Toolbar 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/toolbar_height" 
    app:contentInsetStart="0dp" 
    app:layout_collapseParallaxMultiplier="1.0"> 

    <!-- insert your views here --> 
</android.support.v7.widget.Toolbar> 
0
First set style as 
<style name="style_1" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 

</style> 
then 

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
ActionBar actionBar = getSupportActionBar(); 
     actionBar.setTitle("Home"); 
Powiązane problemy