2016-07-27 5 views
0

So Einstellung ich jetzt etwa eine Woche lang mit diesem Thema zu kämpfen haben ...Ich habe Probleme mit Titeln in Symbolleiste Fragmente in tabLayoyt (Android)

Die Sache ist, dass im eine Menge Probleme, um den Titel in der Symbolleiste zu setzen, abhängig davon, welcher Tab aktiv ist?

ich meine mainActivity haben, in dem ich eine TabLayout und Viewpager haben, die 3 verschiedene Fragmente (Tabs)

Hier ist mein MainActivy aufbläst:

package stefankorfitz.slidingtabdemo.Activities; 

import android.app.Dialog; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.graphics.PorterDuff; 
import android.os.Bundle; 
import android.speech.RecognizerIntent; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.NavigationView; 
import android.support.design.widget.TabLayout; 
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.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.Window; 
import android.widget.Button; 
import android.widget.EditText; 

import at.markushi.ui.CircleButton; 
import stefankorfitz.slidingtabdemo.Adapters.TabFragmentAdapter; 
import stefankorfitz.slidingtabdemo.R; 

public class MainActivity extends AppCompatActivity 
     implements NavigationView.OnNavigationItemSelectedListener { 

    TabLayout tabLayout; 
    ViewPager viewPager; 

    public EditText editTextSearchTitle; 
    public String searchTitle; 

    private static final int REQUEST_CODE = 1234; 

    final Context context = this; 

    private static final String LOG_TAG_REFRESH = MainActivity.class.getSimpleName(); 
    private static final String LOG_TAG_CAST = MainActivity.class.getSimpleName(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     viewPager = (ViewPager) findViewById(R.id.viewPager); 
     viewPager.setAdapter(new TabFragmentAdapter(getSupportFragmentManager(), getApplicationContext())); 

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

     tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
       tab.getIcon().setColorFilter(Color.parseColor("#ffc800"), PorterDuff.Mode.SRC_IN); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
       tab.getIcon().setColorFilter(Color.parseColor("#d2d4d2"), PorterDuff.Mode.SRC_IN); 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
       //tab.getIcon().setColorFilter(Color.parseColor("#d2d4d2"), PorterDuff.Mode.SRC_IN); 
      } 
     }); 

     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) { 

       // Launches the Search DialogFragment 
       final Dialog dialog = new Dialog(context); 

       dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); 
       dialog.setContentView(R.layout.fragment_search); 

       editTextSearchTitle = (EditText) dialog.findViewById(R.id.editTextSearchTitle); 

       // Performs the search 
       Button dialogBtnSearch = (Button) dialog.findViewById(R.id.searchBtnOk); 
       dialogBtnSearch.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 

       // Closes the Dialog 
       Button dialogBtnCancel = (Button) dialog.findViewById(R.id.searchBtnCancel); 
       dialogBtnCancel.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         dialog.dismiss(); 
        } 
       }); 

       // Handles Voice Search 
       CircleButton speakButton = (CircleButton) dialog.findViewById(R.id.searchBtnSpeak); 
       speakButton.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         startVoiceRecognition(); 
        } 
       }); 

       dialog.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.setDrawerListener(toggle); 
     toggle.syncState(); 

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

    private void setupTabIcons() { 
     //tabLayout.getTabAt(0).setIcon(tabIcons[0]); 
     //tabLayout.getTabAt(1).setIcon(tabIcons[1]); 
     //tabLayout.getTabAt(2).setIcon(tabIcons[2]); 

     TabLayout.Tab tab1 = tabLayout.getTabAt(0); 
     tab1.setIcon(R.color.tab1_selector); 
     tab1.getIcon().setColorFilter(Color.parseColor("#ffc800"), PorterDuff.Mode.SRC_IN); 

     TabLayout.Tab tab2 = tabLayout.getTabAt(1); 
     tab2.setIcon(R.color.tab2_selector); 
     tab2.getIcon().setColorFilter(Color.parseColor("#d2d4d2"), PorterDuff.Mode.SRC_IN); 

     TabLayout.Tab tab3 = tabLayout.getTabAt(2); 
     tab3.setIcon(R.color.tab3_selector); 
     tab3.getIcon().setColorFilter(Color.parseColor("#d2d4d2"), PorterDuff.Mode.SRC_IN); 

    } 

    private void startVoiceRecognition() { 

     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 

     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass().getPackage().getName()); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 

     //since you only want one, only request 1 
     intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1); 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, "en-US"); 

     startActivityForResult(intent, REQUEST_CODE); 
     //startActivityForResult(intent, 1234); 
    } 

    @Override 
    public void onBackPressed() { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     if (drawer.isDrawerOpen(GravityCompat.START)) { 
      drawer.closeDrawer(GravityCompat.START); 
     } else { 
      super.onBackPressed(); 
     } 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @SuppressWarnings("StatementWithEmptyBody") 
    @Override 
    public boolean onNavigationItemSelected(MenuItem item) { 
     // Handle navigation view item clicks here. 
     int id = item.getItemId(); 

     if (id == R.id.nav_main) { 
      switch (item.getItemId()) { 

       case R.id.nav_main: 
        Intent intent = new Intent(this, MainActivity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } else if (id == R.id.nav_tab1) { 
      switch (item.getItemId()) { 

       case R.id.nav_tab1: 
        Intent intent = new Intent(this, Tab1Activity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } else if (id == R.id.nav_tab2) { 
      switch (item.getItemId()) { 

       case R.id.nav_tab2: 
        Intent intent = new Intent(this, Tab2Activity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } else if (id == R.id.nav_tab3) { 
      switch (item.getItemId()) { 

       case R.id.nav_tab3: 
        Intent intent = new Intent(this, Tab3Activity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

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

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

     } else if (id == R.id.nav_settings) { 
      switch (item.getItemId()) { 

       case R.id.nav_settings: 
        Intent intent = new Intent(this, SettingsActivity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } else if (id == R.id.nav_help) { 
      switch (item.getItemId()) { 
       case R.id.nav_help: 
        Intent intent = new Intent(this, HelpActivity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } else if (id == R.id.nav_about) { 
      switch (item.getItemId()) { 
       case R.id.nav_about: 
        Intent intent = new Intent(this, AboutActivity.class); 
        this.startActivity(intent); 
        break; 

       default: 
        return super.onOptionsItemSelected(item); 
      } 
      return true; 

     } 

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

Und hier ist mein FragmentAdapter:

package stefankorfitz.slidingtabdemo.Adapters; 

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

import stefankorfitz.slidingtabdemo.Fragments.Tabs.Tab1; 
import stefankorfitz.slidingtabdemo.Fragments.Tabs.Tab2; 
import stefankorfitz.slidingtabdemo.Fragments.Tabs.Tab3; 

/** 
* Created by Stefan on 24-07-2016. 
*/ 
public class TabFragmentAdapter extends FragmentPagerAdapter { 

    Context context; 

    public TabFragmentAdapter(FragmentManager supportFragmentManager, Context applicationContext) { 

     super(supportFragmentManager); 
     context = applicationContext; 
    } 

    @Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 

       return new Tab1(); 

      case 1: 
       return new Tab2(); 

      case 2: 
       return new Tab3(); 

      // In order to add extra tab's, just add extra case here 

     } 
     return null; 

    } 

    @Override 
    public int getCount() { 
     // NOTICE!! Specify the number of above case's here, in order to show ALL tabs 
     return 3; 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     //If you want title's on the tabs, then just remove the outcommenting 
     /* 
     // Setting the titles on tabs 
     switch (position) { 
      case 0: 
       return context.getString(R.string.tab_title_tab1); 

      case 1: 
       return context.getString(R.string.tab_title_tab2); 

      case 2: 
       return context.getString(R.string.tab_title_tab3); 
     } 
     */ 
     return null; 
    } 
} 

Und man das Fragment (die 3 von ihnen sind gleich !!)

package stefankorfitz.slidingtabdemo.Fragments.Tabs; 

import android.os.Bundle; 
import android.os.Handler; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.widget.SwipeRefreshLayout; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import android.widget.Toast; 

import stefankorfitz.slidingtabdemo.R; 

/** 
* Created by Stefan on 24-07-2016. 
*/ 
public class Tab1 extends Fragment implements SwipeRefreshLayout.OnRefreshListener { 

    View view; 
    TextView action_bar_title; 

    android.support.v7.app.ActionBar actionBar; 

    SwipeRefreshLayout mySwipeRefreshLayout; 
    private static final String LOG_TAG = Tab1.class.getSimpleName(); 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     //android.app.ActionBar actionbar = getActivity().getActionBar(); 
     //actionbar.setTitle(getResources().getString(R.string.tab_title_tab1)); 
     view = inflater.inflate(R.layout.fragment_tab1, 
       container, false); 

     //int titleId = getResources().getIdentifier("action_bar_title", "id", "android"); 
     //action_bar_title = (TextView) action_bar_title.findViewById(R.id.action_bar_title); 
     //action_bar_title.setText(R.string.title_guide_1_xx); 

     mySwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.swipeRefresh); 
     mySwipeRefreshLayout.setOnRefreshListener(this); 
     mySwipeRefreshLayout.setColorSchemeResources(R.color.green, R.color.orange, R.color.red); 

     return view; 
    } 

    @Override 
    public void onRefresh() { 

     Log.i(LOG_TAG, "Refresh swipe started..."); 

     Toast.makeText(getActivity(), R.string.toast_refreshing_content, Toast.LENGTH_SHORT).show(); 

     new Handler().postDelayed(new Runnable() { 
      @Override public void run() { 

       // Updates the content of Tab1 using SwipeRefresh 
       // TODO : Implement code here 

       // Turns OFF the Refresh-Ring 
       mySwipeRefreshLayout.setRefreshing(false); 
      } 
     }, 1000); 

     Log.i(LOG_TAG, "Refresh swipe finished!"); 
    } 
} 

Hinweis! Die Hauptherausforderung, die ich habe, ist, dass alle Lösungen, die ich bisher versucht habe, nur den gleichen Titel in Tab1 + Tab2 setzt ... Und wenn ich dann den ganzen Tab3 überstreiche, setzt er den richtigen Titel für Tab3, aber es bleibt dort, wenn ich zurück zu Tab2 wische und dann, wenn ich den ganzen Weg zurück zu Tab1 komme, zeigt es dann den Titel von Tab2?

ICH WÜRDE SO SO GLÜCKLICH SEIN, WENN JEMAND MICH HIER helfen könnte ...

Bei Code aus dem Beispiel fehlt etwas Licht des Problems zu werfen? Dann pls lassen Sie mich wissen, und ich werde einige weitere Beispiele laden :-)

Sie Kerls Vielen Dank im Voraus ...

+0

Wo setzen Sie den Titel? – Chol

+0

Der Titel kommt von strings.xml res! ... –

Antwort

0

In Ihrem setOnTabSelectedListener, versuchen, etwas wie folgt aus:

@Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
       tab.getIcon().setColorFilter(Color.parseColor("#ffc800"), PorterDuff.Mode.SRC_IN); 
       switch (tab.getPosition()){ 
        case 0: 
        getSupportActionBar().setTitle("title1"); 
        break; 
        case 1: 
         getSupportActionBar().setTitle("title2"); 
         break; 
        case 2: 
         getSupportActionBar().setTitle("title3"); 
         break; 
         } 
       } 
+0

Wow !! Diese Lösung ist die nächste, die ich bisher gekommen bin !! Einziger kleiner Fehler ist: Es setzt den Titel zunächst nicht auf Tab1 - aber nach dem ersten Streichen funktioniert es dann perfekt :-) –

+0

Irgendwelche Gedanken dazu!? –

+0

Für den Moment habe ich gerade den R.string.tab_title_1 im label-Attribut in meiner Manifest-Datei auf der MainActivity verwendet :-) –

0

a Erstellen Gemeinsame Funktion bei MainActivity

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 



public static void settitle(String title){ 

     toolbar.setTitle(title); 
    } 

Jetzt rufen Sie unten Methode aus jedem Fragment, wo Sie Titel festlegen möchten.

MainActivity.settitle(getString(R.string.dashboard)); 

OR Fügen Sie Titel wie unten:

@Override 
    public Fragment getItem(int position) { 

     switch (position) { 
      case 0: 

       getSupportActionBar("title1"); 

      case 1: 
       getSupportActionBar("title2"); 

      case 2: 
       getSupportActionBar("title3"); 


     } 
     return null; 

    } 

Aber ich schlug vor, zunächst mit Kommentar-Klasse.