Mit Hilfe dieser Android- Dokumente. Ich versuche, eine Schaltfläche zum Zurücksetzen der Aktionsleiste zu erstellen. Ich erhalte eine Schaltfläche zum Zurücksetzen der Aktionsleiste wie folgt:
Ausgabe:
Aber mein Problem ist, nachdem ich die Bilder der Galerie angesehen habe, drücke ich auf action bar back button
.
Dann. it is not working
Aber es muss go back to previous page
.
Nachfolgend sind die Codierungen aufgeführt.
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;
}
}
Jeder kann mir helfen, wenn Sie wissen, wie man diese löst. Danke.
android
android-actionbar
Steve
quelle
quelle
Antworten:
Ich habe dieses Problem gelöst, indem ich die folgende Codierung hinzugefügt habe
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); }
In der Hauptaktivität :
Vorher,
Dann wechsle ich in
In GalleryFragment:
Ich
Intent
gebe es an die weiterGalleryActivity
.@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()); }
quelle
onBackPressed
ist genau das, wonach ich gesucht habe. Einer meiner Einstellungsbildschirme wurde von mehreren Bildschirmen aus geöffnet, und ich wollte zu derselben Aktivität zurückkehren, mit der er geöffnet wurde. Was ist diese spezielle IDandroid.R.id.home
im Zusammenhang mit Android-Aktivitäten?onBackPressed
Home-Aktion Ihres Optionsmenüs wird nicht empfohlen: Mit der Aufwärts-Schaltfläche (Zurück-Pfeil in der oberen linken Ecke) können Sie innerhalb einer App basierend auf den hierarchischen Beziehungen zwischen den Bildschirmen navigieren. Mit der System-Zurück-Schaltfläche können Sie in umgekehrter chronologischer Reihenfolge navigieren In der Geschichte der Bildschirme hat der Benutzer kürzlich gearbeitet. WeitereBitte lesen Sie dies
Sie sollten so etwas haben:
<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>
Wenn Sie dann NavUtils.navigateUpFromSameTask (dies) aufrufen, navigieren Sie zur übergeordneten Aktivität (HomeActivity).
quelle
Gallery Detail Fragment
zuGallery Activity
.Ich habe auch im Bild gezeigtGalleryDetailFragment
wird gehostet?Sie müssen anrufen die Methode setDisplayHomeAsUpEnabled (true) in der Methode onCreate aufrufen, onSupportNavigateUp () überschreiben und darin onBackPressed () wie folgt aufrufen . Das ist es. erledigt :)
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_help); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; }
quelle
android:parentActivityName
Einstellungen für Ihre Aktivität vorgenommen haben, bevor Sie manuell anrufenonBackPressed
. Siehe stackoverflow.com/a/24033351/1563833Sie müssen nur die folgende Zeile zur Aktivität in der Datei manifest.xml hinzufügen. Die übergeordnete Aktivität ist die Aktivität, zu der Sie zurückkehren möchten.
android:parentActivityName=".activities.MainActivity"
quelle
Versuchen Sie es wie
Zunächst müssen Sie
addToBackStack()
zuvorcommit()
für Fragmente verwenden@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); }
quelle
Die beste und einfachste Antwort ist das Hinzufügen des übergeordneten Aktivitätsnamens in der Manifestdatei, damit die Zurückschaltfläche der Aktionsleiste funktioniert.
Verwenden Sie dazu unter dem Activity-Tag der Manifest-Datei
android:parentActivityName=".MyCustomParentActivity"
quelle
Keine der hier gegebenen Antworten hat bei mir funktioniert. Ich musste das
switch
in dieonMenuItemSelected
Methode einbauen. Ich bin mir bewusst, dass dies nicht in der Android-Dokumentation angegeben ist, aber es hat trotzdem funktioniert. Deshalb dachte ich nur, ich würde dies hier für Leute belassen, die auf dasselbe Problem stoßen. Mein Problem war einActivity
statt einesFragment
, aber das sollte ziemlich gleich sein.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; } }
quelle
Verwenden Sie die
SupportNavigateUp()
Methode on und rufen SieonBackPressed
diese Methode auf.quelle
wenn die Home-Taste angezeigt wird. Sie sollten der Home-Schaltfläche über onOptionItemSelected fun eine Aktion hinzufügen (Pfeil in Ihrem Fall). Standardmäßig gibt es keine Aktion. Es ist also völlig normal, dass es nicht funktioniert. Bitte fügen Sie diesen Spaß zu Ihrer Aktivität hinzu:
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when { item.itemId == android.R.id.home -> { finish() true } else -> super.onOptionsItemSelected(item) } }
quelle
Für mich musste ich mich
mDrawerToggle.setToolbarNavigationClickListener(...)
auf einen Listener einstellen , der die Back-Aktion auslöst. Sonst macht es nichts. SoActionBarDrawerToggle
sieht der Quellcode von aus:toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (mDrawerIndicatorEnabled) { toggle(); } else if (mToolbarNavigationClickListener != null) { mToolbarNavigationClickListener.onClick(v); } } });
Das Standardverhalten ist also, unseren Hörer anzurufen und keine Magie alleine zu machen.
quelle
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); }
quelle
Hier ist noch eine Sache zu überprüfen, falls die anderen Antworten hier (oder hier oder hier oder hier ) nicht funktionieren.
Ich hatte Code aus einer anderen Aktivität kopiert, die das Menü deaktivierte. Durch Löschen dieser Methode (und Anwenden der in den anderen Antworten angegebenen Lösungen) konnte die Schaltfläche "Auf" funktionieren.
@Override public boolean onCreateOptionsMenu(Menu menu) { // hide the menu return false; }
quelle
In meinem Fall hatte ich die onCreateOptionsMenu-Methode überschrieben und am Ende vergessen, super aufzurufen.
quelle