在这些Android Docs的帮助下。我正在尝试执行操作栏后退按钮。我得到一个动作栏后退按钮,如下图所示:
输出:
但我的问题是在观看图库图像后,我按了action bar back button
。
然后it is not working
。但必须go back to previous page
。
下面列出的是编码。
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;
}
}
如果您知道如何解决这些问题,任何人都可以帮助我。谢谢。
答案 0 :(得分:151)
我通过在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);
}
MainActivity :
此前,
public class HomeActivity扩展了BaseActivity
然后我换成
公共类HomeActivity扩展了FragmentActivity
在 GalleryFragment:
中我使用Intent
将其传递给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());
}
答案 1 :(得分:32)
请阅读this
你应该有这样的事情:
<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>
然后调用NavUtils.navigateUpFromSameTask(this)将导致导航到父活动(HomeActivity)。
答案 2 :(得分:8)
尝试
首先,您需要在addToBackStack()
之前使用commit()
for 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);
}
答案 3 :(得分:7)
您只需将以下行添加到manifest.xml中的活动即可。父活动是您想要返回的活动。
android:parentActivityName=".activities.MainActivity"
答案 4 :(得分:2)
最好且容易的答案是在清单文件中添加父活动名称,这样操作栏后退按钮就可以使用。
对于清单文件的活动标签下的使用
android:parentActivityName=".MyCustomParentActivity"
答案 5 :(得分:1)
这里提供的答案都不适合我。我必须将switch
放在onMenuItemSelected
方法中。我知道这不是Android文档中所说的,但它仍然有效,所以我只是想把这个留给遇到同样问题的人。我的问题涉及Activity
而不是Fragment
,但这应该是完全一样的。
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;
}
}
答案 6 :(得分:1)
使用SupportNavigateUp()
方法并在此方法中调用onBackPressed
。
答案 7 :(得分:0)
对我来说,我必须将mDrawerToggle.setToolbarNavigationClickListener(...)
设置为触发后退动作的侦听器。否则它什么都不做。这就是ActionBarDrawerToggle
的源代码:
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mDrawerIndicatorEnabled) {
toggle();
} else if (mToolbarNavigationClickListener != null) {
mToolbarNavigationClickListener.onClick(v);
}
}
});
因此,默认行为实际上是调用我们的侦听器,而不是自己做任何魔法。
答案 8 :(得分:0)
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);
}
答案 9 :(得分:0)
如果此处的其他答案(或here或here或here)不起作用,还有一件事需要检查。
我从另一个禁用菜单的活动中复制了一些代码。删除此方法(并应用其他答案中给出的解决方案)允许向上按钮工作。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// hide the menu
return false;
}
答案 10 :(得分:0)
在我的情况下,我已经覆盖了onCreateOptionsMenu方法,但我忘了在最后调用super。
答案 11 :(得分:0)
如果显示主页按钮。您应该通过 onOptionItemSelected 乐趣(在您的情况下为箭头)将操作添加到主页按钮,默认情况下没有任何操作。因此无法正常运作是完全正常的。请将此乐趣添加到您的活动中:
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return when {
item.itemId == android.R.id.home -> {
finish()
true
}
else -> super.onOptionsItemSelected(item)
}
}
答案 12 :(得分:0)
您需要在onCreate方法中调用 setDisplayHomeAsUpEnabled(true)方法,并覆盖 onSupportNavigateUp()并在其中调用 onBackPressed()下面。而已。完成:)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_help);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
答案 13 :(得分:0)
工具栏为 Kotlin 绑定启用后退按钮
setSupportActionBar(binding.toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_times_ic)