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:
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.
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());
}
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).
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"
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);
}
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;
}
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;
}
}
Utilisez la méthode SupportNavigateUp()
et appelez onBackPressed
dans cette méthode.
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);
}
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.
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;
}
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)
}
}
Dans mon cas, j'avais remplacé la méthode onCreateOptionsMenu et j'avais oublié d'appeler super à la fin.