简体   繁体   中英

how to change Action bar icon to back arrow when open a fragment

I am trying to create an app. I want to change navigation drawer icon to back Arrow in Action Bar and when i open a fragment and go back to main activity when i click on back arrow in fragment Using the following code-

public class MainActivity extends FragmentActivity implements OnMapReadyCallback, ConnectionCallbacks, OnConnectionFailedListener,LocationListener{
 DrawerLayout mDrawerLayout;
 ListView mDrawerList;
 @SuppressWarnings("deprecation")
ActionBarDrawerToggle mDrawerToggle;
 String mTitle="";
 private final String  TAG = this.getClass().getSimpleName();

    LocationRequest mLocationRequest;
    GoogleApiClient mGoogleApiClient;

    LatLng latLng;
    GoogleMap mMap;
    SupportMapFragment mFragment;
    Marker CurrentMarker,NearbyPlace,FindMarker;
    EditText editplace = null;
    Button findbtn = null;
    boolean firstRun = true;
    private Boolean exit = false;


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

    //for connectivity service
    ConnectivityManager cManager = (ConnectivityManager) getSystemService(this.CONNECTIVITY_SERVICE);
    NetworkInfo nInfo = cManager.getActiveNetworkInfo();
    if (nInfo != null && nInfo.isConnected()) {
        Toast.makeText(this, "Network is available ", Toast.LENGTH_SHORT).show();

        AdView adView = (AdView)findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder()
        //.addTestDevice("abc")
        .build();
        adView.loadAd(adRequest);
    mFragment=(SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    mFragment.getMapAsync(this);

    }


    else{
        Toast.makeText(this, "Network is not available ", Toast.LENGTH_SHORT).show();
        Fragment newFragment;
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        newFragment = new NetworkCheck();
        transaction.replace(R.id.content_frame, newFragment);
        transaction.addToBackStack(null);
        transaction.commit();
    }

    editplace = (EditText) findViewById(R.id.editplace);
    findbtn = (Button) findViewById(R.id.findbtn);

    setListnerOnWidget();

    mTitle = (String) getTitle();
    // Getting reference to the DrawerLayout
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
    mDrawerList = (ListView) findViewById(R.id.drawer_list);

    // Getting reference to the ActionBarDrawerToggle
    mDrawerToggle = new ActionBarDrawerToggle( this,
        mDrawerLayout,
        R.drawable.ic_drawer,
        R.string.drawer_open,
        R.string.drawer_close){

            /** Called when drawer is closed */
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
                invalidateOptionsMenu();
            }

            /** Called when a drawer is opened */
            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle("Select a menu");
                invalidateOptionsMenu();
            }
    };

    // Setting DrawerToggle on DrawerLayout
    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerToggle.setDrawerIndicatorEnabled(true);

    // Creating an ArrayAdapter to add items to the listview mDrawerList
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(
        getBaseContext(),
        R.layout.drawer_list_item ,
        getResources().getStringArray(R.array.menu)
    );

    mDrawerList.setAdapter(adapter);

    getActionBar().setHomeButtonEnabled(true);
    getActionBar().setDisplayHomeAsUpEnabled(true);




    // Setting item click listener for the listview mDrawerList
    mDrawerList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent,
            View view,
            int position,
            long id) {
            displayView(position);
            // Updating the action bar title
            String[] menu = getResources().getStringArray(R.array.menu);
            mTitle = menu[position];

            mDrawerLayout.closeDrawer(mDrawerList);

        }

        private void displayView(int position) {
            // TODO Auto-generated method stub
            Fragment newFragment;
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            switch (position) {
            case 0:

                newFragment = new Help();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                break;

            case 1:

                newFragment = new ContactUs();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                break;

              case 2:

                transaction.addToBackStack(null);
                getActionBar().setTitle("IQWINER");
                try
                { 
                  Intent i = new Intent(Intent.ACTION_SEND);  
                  i.setType("text/plain");
                  i.putExtra(Intent.EXTRA_SUBJECT, "My application name");
                  String sAux = "\nLet me recommend you this application\n\n";
                  sAux = sAux + "https://play.google.com/store/apps/details?id=com.iqwiner\n\n";
                  i.putExtra(Intent.EXTRA_TEXT, sAux);  
                  startActivity(Intent.createChooser(i, "Choose an action"));

                }
                catch(Exception e)
                { //e.toString();
                } 
                break;

              case 3:
                newFragment = new Suggestion_Address();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                Log.e(TAG, "Suggestion Address button is clicked");
                break;

            }

        }

    });



}

private void setListnerOnWidget() {
    // TODO Auto-generated method stub
    OnClickListener listener = new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            String location = editplace.getText().toString();
            if(location!=null && !location.equals("")){
                  new GeocoderTask().execute(location); 

                }
    }
    };
   findbtn.setOnClickListener(listener);

}



@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    mDrawerToggle.syncState();
}


@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    mDrawerToggle.onConfigurationChanged(newConfig);
}




//for back button 

@Override
public void onBackPressed() {

    if(mDrawerLayout.isDrawerOpen(Gravity.START)){
        mDrawerLayout.closeDrawer(Gravity.START);
       }
    else if(getFragmentManager().getBackStackEntryCount() > 1){
         super.onBackPressed(); 
    }
    else{
        if (exit){
            finish(); // finish activity
        }
        else{
            Toast.makeText(this, "Tap Back again to Exit.",
                    Toast.LENGTH_SHORT).show();
            exit = true;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    exit = false;
                }
            }, 3 * 1000);
        }
    }
}

I want to change navigation drawer icon to back arrow icon when i open a fragment and when i click on back arrow then go back to main activity from a fragment.

Thanks

Remove the below code :

      mDrawerToggle.setDrawerIndicatorEnabled(true);

            // Creating an ArrayAdapter to add items to the listview mDrawerList
            ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                getBaseContext(),
                R.layout.drawer_list_item ,
                getResources().getStringArray(R.array.menu)
            );

            mDrawerList.setAdapter(adapter);

            getActionBar().setHomeButtonEnabled(true);
            getActionBar().setDisplayHomeAsUpEnabled(true);
  // Setting item click listener for the listview mDrawerList
    mDrawerList.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent,
            View view,
            int position,
            long id) {
            displayView(position);
            // Updating the action bar title
            String[] menu = getResources().getStringArray(R.array.menu);
            mTitle = menu[position];

            mDrawerLayout.closeDrawer(mDrawerList);

        }

        private void displayView(int position) {
            // TODO Auto-generated method stub
            Fragment newFragment;
            FragmentTransaction transaction = getFragmentManager().beginTransaction();
            switch (position) {
            case 0:

                newFragment = new Help();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                break;

            case 1:

                newFragment = new ContactUs();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                break;

              case 2:

                transaction.addToBackStack(null);
                getActionBar().setTitle("IQWINER");
                try
                { 
                  Intent i = new Intent(Intent.ACTION_SEND);  
                  i.setType("text/plain");
                  i.putExtra(Intent.EXTRA_SUBJECT, "My application name");
                  String sAux = "\nLet me recommend you this application\n\n";
                  sAux = sAux + "https://play.google.com/store/apps/details?id=com.iqwiner\n\n";
                  i.putExtra(Intent.EXTRA_TEXT, sAux);  
                  startActivity(Intent.createChooser(i, "Choose an action"));

                }
                catch(Exception e)
                { //e.toString();
                } 
                break;

              case 3:
                newFragment = new Suggestion_Address();
                transaction.replace(R.id.content_frame, newFragment);
                transaction.addToBackStack(null);
                transaction.commit();
                Log.e(TAG, "Suggestion Address button is clicked");
                break;

            }

        }

    });

and change it with below code:

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

                // This method will trigger on item Click of navigation menu
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {


                    //Checking if the item is in checked state or not, if not make it in checked state
                    if (menuItem.isChecked()) menuItem.setChecked(false);
                    else menuItem.setChecked(true);

                    //Closing drawer on item click
                    drawerLayout.closeDrawers();

                    //Check to see which item was being clicked and perform appropriate action
                    switch (menuItem.getItemId()) {


                        //Replacing the main content with ContentFragment Which is our Inbox View;
                        case R.id.drawer_home:
                            txt_title.setText("Home");
                            Intent intent=new Intent(HomeActivity.this, HomeActivity.class);
                            startActivity(intent);
                            finish();
                            return true;
                   case R.id.drawer_artist:

                    txt_title.setText("Artists");
                    android.support.v4.app.FragmentManager fragmentManager=getSupportFragmentManager();
                    android.support.v4.app.FragmentTransaction fragmentTransaction=fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.content_frame, new ArtistsFragment());
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();
                    return true;

                case R.id.drawer_myplaylist:

                    txt_title.setText("My Playlists");
                    fragmentManager = getSupportFragmentManager();
                    fragmentTransaction = fragmentManager.beginTransaction();
                    fragmentTransaction.replace(R.id.content_frame, new PlayListFragment());
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();
                    return true;

                        default:
                            Toast.makeText(getApplicationContext(), "Somethings Wrong", Toast.LENGTH_SHORT).show();
                            return true;

                    }
                }
            });

Edit

xml:

<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:elevation="4dp"
    android:layout_height="fill_parent"
    >


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"

        >
        <include
            android:id="@+id/tool_bar"
            layout="@layout/toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            />


        <FrameLayout
            android:id="@+id/content_frame"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/home">


         //Your layout
        </FrameLayout>
    </LinearLayout>

    <android.support.design.widget.NavigationView
        android:id="@+id/navigation"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        android:background="@drawable/bg_all"
        app:itemIconTint="@android:color/white"
        app:itemTextColor="@android:color/white"
        app:theme="@style/list_item_appearance"
        app:menu="@menu/drawer_menu" >

    </android.support.design.widget.NavigationView>
</android.support.v4.widget.DrawerLayout>
getSupportFragmentManager().addOnBackStackChangedListener(
                new FragmentManager.OnBackStackChangedListener() {
                    @Override
                    public void onBackStackChanged() {
                        if (getSupportFragmentManager()
                                .getBackStackEntryCount() > 0) {
                            getSupportActionBar()
                                    .setDisplayHomeAsUpEnabled(true); // show
                            // back button
                            mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    onBackPressed();
                                }
                            });
                        } else {
                            // show hamburger
                            getSupportActionBar()
                                    .setDisplayHomeAsUpEnabled(false);
                            mDrawerToggle.syncState();
                            mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    drawerLayout
                                            .openDrawer(GravityCompat.START);
                                }
                            });
                        }
                    }
                });

Use the following after mDrawerLayout.setDrawerListener(mDrawerToggle);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM