web-dev-qa-db-fra.com

La barre d'action Le bouton Précédent ne fonctionne pas

avec l'aide de ces Android Docs . J'essaie de faire un bouton Précédent de la barre d'action.J'obtiens un bouton Précédent de la barre d'action comme ci-dessous:

enter image description here

Sortie:

Mais mon problème est Après avoir regardé les images de la galerie, appuyez sur la touche action bar back button.

Ensuite it is not working. Mais il faut que go back to previous page.

Ci-dessous sont les codages.

GalleryActivity.Java:

    import Android.app.ActionBar;
    import Android.os.Bundle;
    import Android.support.v4.app.FragmentActivity;
    import Android.support.v4.app.NavUtils;
    import Android.view.MenuItem;

    import com.fth.Android.R;

   public class GalleryActivity extends FragmentActivity {

    private int position;
    private static String id;
    private static String name;
    private DemoCollectionPagerAdapter mDemoCollectionPagerAdapter;
    private ViewPager mViewPager;


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

            position = getIntent().getExtras().getInt("position");

            id = getIntent().getExtras().getString("id");

            name = getIntent().getExtras().getString("name");

            mDemoCollectionPagerAdapter = new DemoCollectionPagerAdapter(getSupportFragmentManager());

            // Set up action bar.
            final ActionBar actionBar = getActionBar();


            actionBar.setDisplayHomeAsUpEnabled(true);

           // getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME|ActionBar.DISPLAY_USE_LOGO|ActionBar.DISPLAY_HOME_AS_UP);

            // Set up the ViewPager, attaching the adapter.
            mViewPager = (ViewPager) findViewById(R.id.pager);
            mViewPager.setAdapter(mDemoCollectionPagerAdapter);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()) {
                case Android.R.id.home:

                    Intent upIntent = new Intent(this, HomeActivity.class);
                    upIntent.putExtra("position", position);
                    if (NavUtils.shouldUpRecreateTask(this, upIntent)) {

                        TaskStackBuilder.from(this)
                                .addNextIntent(upIntent)
                                .startActivities();
                        finish();
                    } else {

                        NavUtils.navigateUpTo(this, upIntent);
                    }
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }


      }

GalleryDetailFragment.Java:

import com.sit.fth.model.GalleryDetail;
import com.sit.fth.util.APIServiceHandler;
import com.sit.fth.util.AppConstants;
import com.sit.fth.util.AppPromoPager;

public class GalleryDetailFragment extends BaseFragment implements
        PromoPagerListener {


    private TextView countView;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        this.setHasOptionsMenu(true);
        id = getArguments().getString("id");
        name = getArguments().getString("name");
        View view = inflater.inflate(R.layout.app_pager, null);



        return view;
    }

}

N'importe qui peut m'aider si vous savez comment résoudre ces problèmes. Merci.

61
Stephen

J'ai résolu ces problèmes en ajoutant le codage ci-dessous dans GalleryActivity.

ActionBar actionBar;
actionBar=getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);

@Override
public boolean onOptionsItemSelected(MenuItem item) { 
        switch (item.getItemId()) {
        case Android.R.id.home: 
            onBackPressed();
            return true;
        }

    return super.onOptionsItemSelected(item);
}

Dans MainActivity:

Précédemment,

classe publique HomeActivity étend BaseActivity

Puis je me change en

public class HomeActivity étend FragmentActivity

Dans GalleryFragment:

J'utilise Intent pour le transmettre au GalleryActivity.

@Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        Gallery gallery = (Gallery) arg0.getAdapter().getItem(arg2);

        Intent intent = new Intent(getActivity(), GalleryActivity.class);
        intent.putExtra("position", position);
        intent.putExtra("id", gallery.getGalId());
        intent.putExtra("name", gallery.getAlbumTitle());
        startActivity(intent);

        // mCallback.OnGalItemSelected(gallery.getGalId(),gallery.getAlbumTitle());
    } 
156
Stephen

Veuillez lire this

vous devriez avoir quelque chose comme ça:

    <activity
        Android:name="com.sit.fth.activity.HomeActivity"
        Android:screenOrientation="portrait">

    </activity>
    <activity
        Android:name="com.sit.fth.activity.GalleryActivity"
        Android:screenOrientation="portrait"
        Android:parentActivityName="com.sit.fth.activity.HomeActivity">

    <meta-data
        Android:name="Android.support.PARENT_ACTIVITY"
        Android:value="com.sit.fth.activity.HomeActivity"/>

   </activity>


appeler ensuite NavUtils.navigateUpFromSameTask (this) entraînera la navigation vers l’activité parent (HomeActivity).

32
x90

Il vous suffit d'ajouter la ligne suivante à l'activité dans le fichier manifest.xml. L'activité parent est l'activité vers laquelle vous souhaitez revenir.

    Android:parentActivityName=".activities.MainActivity"
9
scientist

Essayez comme

Tout d’abord, vous devez utiliser addToBackStack() avant commit() pour les fragments.

@Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
         // Respond to the action bar's Up/Home button
         case Android.R.id.home:
             if(getSupportFragmentManager().getBackStackEntryCount()>0)
                getSupportFragmentManager().popBackStack();
             return true;
         }
         return super.onOptionsItemSelected(item);
     } 
9
Amit Gupta

Vous devez appeler la méthode setDisplayHomeAsUpEnabled (true) dans la méthode onCreate et remplacer onSupportNavigateUp () et appeler onBackPressed () comme ci-dessous. C'est ça. terminé :)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_help);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onSupportNavigateUp() {
    onBackPressed();
    return true;
}
8
Chanaka Fernando

Aucune des réponses fournies ici n'a fonctionné pour moi. Je devais mettre le switch à l'intérieur de la méthode onMenuItemSelected. Je suis conscient que ce n'est pas ce qui est indiqué dans la documentation de Android, mais cela a fonctionné, alors j'ai pensé que je laisserais cela ici pour les personnes qui rencontrent le même problème. Le problème impliquait un Activity au lieu d'un Fragment, mais cela devrait être à peu près le même.

class FooActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ...

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

    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch (item.getItemId()) {
            case Android.R.id.home:
                NavUtils.navigateUpFromSameTask(this);
                return true;
        }

        return false;
    }
}
1
PLPeeters

Utilisez la méthode SupportNavigateUp() et appelez onBackPressed dans cette méthode.

1
Raj Godara

onCreate

{
    ...
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            resetActionBar();
    ...
 }


public void resetActionBar()
    {
    getSupportActionBar().setDisplayShowHomeEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

 @Override
          public void onBackPressed() {
            FragmentManager fm = getSupportFragmentManager();
            int count = fm.getBackStackEntryCount();
            if(count == 0) {
                // Do you want to close app?
                showDialog();
            }else{
                super.onBackPressed();
            }
        }


    @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();
            Log.i("coming", "comming");
            //noinspection SimplifiableIfStatement
            if(id==Android.R.id.home){
                if (getSupportFragmentManager().getBackStackEntryCount() > 0)
                    onBackPressed();
                else
                    drawerLayout.openDrawer(navigationView);
                return  true;
            }

            return super.onOptionsItemSelected(item);
        }
0
Hamza Mehmood

Pour moi, je devais définir mDrawerToggle.setToolbarNavigationClickListener(...) sur un écouteur qui déclenche l'action de retour. Sinon ça ne fait rien. Voici à quoi ressemble le code source de ActionBarDrawerToggle:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    if (mDrawerIndicatorEnabled) {
      toggle();
    } else if (mToolbarNavigationClickListener != null) {
      mToolbarNavigationClickListener.onClick(v);
    }
  }
});

Le comportement par défaut consiste donc à appeler notre auditeur et à ne pas faire de magie par lui-même.

0
daniel.gindi

Voici une dernière chose à vérifier au cas où l’autre répond ici (ou ici ou ici ou ici ) ne fonctionne pas.

J'avais copié du code d'une autre activité qui désactivait le menu. Supprimer cette méthode (et appliquer les solutions données dans les autres réponses) a permis au bouton haut de fonctionner.

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // hide the menu
    return false;
}
0
Suragch

si le bouton d'accueil est affiché. vous devez ajouter une action au bouton d'accueil via onOptionItemSelected fun (flèche dans votre cas) par défaut, aucune action n'est effectuée. il est donc tout à fait normal que cela ne fonctionne pas. S'il vous plaît ajouter ce plaisir à votre activité:

 override fun onOptionsItemSelected(item: MenuItem): Boolean {
        return when {
            item.itemId == Android.R.id.home -> {
                finish()
                true
            }
            else -> super.onOptionsItemSelected(item)
        }
    }
0
Brahem Mohamed

Dans mon cas, j'avais remplacé la méthode onCreateOptionsMenu et j'avais oublié d'appeler super à la fin.

0
Matt Mendrala