wake-up-neo.com

So implementieren Sie die Android Toolbar-Schaltfläche "Zurück"

Ich verwende eine benutzerdefinierte Symbolleiste. Ich muss den Button wieder hinzufügen. Jetzt verwende ich diesen Code, um die Zurück-Schaltfläche hinzuzufügen.

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
        toolbar.setBackgroundColor(getResources().getColor(R.color.white));
        toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                onBackPressed();
            }
        });

Das funktioniert gut. Ich kann den Zurück-Button sehen. Betrachten Sie jedoch den Fall, in dem ich mich in Fragment1 befinde, das keinen Zurück-Button hat. Nun gehe ich zu Fragment2 und füge den Back Button hinzu. Von Fragment 2 aus öffne ich Fragment 3 und füge erneut die Zurück-Schaltfläche hinzu. 

Wenn ich jetzt auf die Schaltfläche "Zurück" von fragment3 klicke, um zu "fragment2" zurückzukehren, muss ich den Fragmentstapel überprüfen, um zu sehen, ob die Zurück-Schaltfläche in Fragment 2 erforderlich ist oder nicht.

Gibt es eine andere Möglichkeit, die Zurück-Taste automatisch zu bearbeiten, während wir Fragmente in den Stapel schieben?

17
Zach

Sie können das Rücksymbol sehr leicht handhaben. Wenn sich alle Fragmente in einer einzigen Aktivität befinden, empfehle ich wirklich, dies folgendermaßen zu tun:

legen Sie zunächst eine abstrakte BaseFragment-Klasse an, die FragmentManager .OnBackStackChangedListener implementiert, und fügen Sie die folgende Methode hinzu:

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

        mainActivity = (MainActivity) getActivity();

        getFragmentManager().addOnBackStackChangedListener(this);

        shouldDisplayHomeUp();
    }

    @Override
    public void onBackStackChanged() {
        shouldDisplayHomeUp();
    }


    public boolean shouldDisplayHomeUp() {
        //Enable Up button only  if there are entries in the back stack
        boolean canBack = false;
        try {
            canBack = getFragmentManager().getBackStackEntryCount() > 0;
        } catch (Exception ex) {
//            Log.e(getClass().getCanonicalName(), ex.getMessage());getMessage
        }

        if (canBack) {
            mainActivity.drawerDisable();
        } else {
            mainActivity.drawerEnable();
        }
        return canBack;
    }

Auf diese Weise handhaben disableDrawer & enableDrawer Funktion Ihre Icon- und OnBackPressed-Methode Ihre BackStack Now-Methode in Ihrer Aktivität, wenn Sie bei Bedarf die Back-Icon-Anzeige drücken. Ihr onBackPressed sollte ungefähr so ​​aussehen:

 int backStackCount = getSupportFragmentManager().getBackStackEntryCount();

            if (backStackCount == 0) {
                //nothing exist in backStack OS handle it
                super.onBackPressed();
            } else {

                getSupportFragmentManager().popBackStack();
}

Siehe vollständige Implementierung hier .

0
Amir

Fügen Sie einfach zwei neue Codezeile hinzu. Etwas wie das

Toolbar toolbar = (Toolbar) getActivity().findViewById(R.id.toolbar);
toolbar.setBackgroundColor(getResources().getColor(R.color.white));
toolbar.setNavigationIcon(getResources().getDrawable(R.drawable.back_arrow));

setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onBackPressed();
    }
});
17
Masum

Dies setzt voraus, dass Sie eine AppCompatActivity verwenden

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

        toolbar = (Toolbar) findViewById(R.id.tool_bar); // Attaching the layout to the toolbar object
        setSupportActionBar(toolbar);

        // enabling action bar app icon and behaving it as toggle button
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
   }

In onOptionsItemSelected können Sie die Home-Schaltfläche wie folgt überschreiben:

 @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;
        }
        else if(id == Android.R.id.home){
            Intent i= new Intent(this, MainActivity.class);
            i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(i);
            finish();
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
8
ChoklatStu

Es funktioniert bei gedrückter Funktion in der Symbolleiste

private setUpToolBar() {

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

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

getSupportActionBar().setDisplayShowHomeEnabled(true);

toolbar.setNavigationOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

onBackPressed();

}

});

}
0
Abhishek S

verwenden Sie Method in Class Ihre Aktivität

private void setupToolbar(){
  Toolbar toolbar=(Toolbar)findViewById(R.id.toolbar);
       setSupportActionBar(toolbar);
       ActionBar actionBar=getSupportActionBar();
       actionBar.setDisplayHomeAsUpEnabled(true);
       actionBar.setDisplayShowHomeEnabled(true);
       toolbar.setNavigationOnClickListener(new View.OnClickListener() {
   @Override
          public void onClick(View v) {  
           finish();  
             }
               });
              }
0
iman hoshmand

ich habe Hauptaktivität und Vier Fragmente ..__ In MainActivity schreibe ich diesen Code 

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();

        }
    });

dies funktioniert gut und wenn Sie Fragmente haben, erstellen Sie eine onBackPressed () - Methode

@Override
public void onBackPressed() {
    int position = mViewPager.getCurrentItem();
    if(position == 2) { // go back to search / result tab from info detail tab
        mViewPager.setCurrentItem(2);
    } else if(position == 0) { // switch from result to search tab or go back to home tab
        SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter();
        Fragment fragment = sectionsPagerAdapter.getItem(position);
        if(fragment instanceof ResultFragment) {
            Bundle bundle = ((ResultFragment) fragment).getArguments();
            if(bundle != null) {
                sectionsPagerAdapter.replaceFragment(SearchFragment.newInstance(bundle.getString(GlobalInfo.TAG_ID), bundle.getString(GlobalInfo.PART_NO), bundle.getString(GlobalInfo.SERIAL_NO), bundle.getString(GlobalInfo.PART_NAME)), getString(R.string.search), 0);
            }
        } else {
            mViewPager.setCurrentItem(1);
        }
    }
    else if(position == 3){
        SectionsPagerAdapter sectionsPagerAdapter = (SectionsPagerAdapter) mViewPager.getAdapter();
        Fragment fragment = new ToolMgtFragment();
        sectionsPagerAdapter.replaceFragment(fragment,"Tool Mgt", 3);
    }
    else {
        super.onBackPressed();
    }
}
0
Neeraj Upadhyay