0

有很多类似这样的问题问,但一切我都试过,似乎不行。 本质上,我有一个主要活动,根据用户单击默认主页片段时调用不同的片段。 我想在标题栏上有一个后退按钮,以返回到前一个片段。返回导航标题栏 - 片段

我的片段从上述主要活动称为像这样:

Fragment fragment = null; 
    fragment = new nextFragment(); 

    if (fragment != null) { 
     FragmentManager fragmentManager = getFragmentManager(); 
     FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

     fragmentTransaction.replace(R.id.frame_container, fragment).addToBackStack(null); 
     fragmentTransaction.commit(); 
     fragmentTransaction.addToBackStack(null); 

    } else { 
     // error in creating fragment 
     Log.e("MainActivity", "Error in creating fragment"); 
    } 

但由于ActionBarActivity活动已被弃用我需要延长AppCompatActivity代替FragmentActivity这样我就可以使用动作条(我假定这就是我需要)。 但是,我无法切换到我的片段。所以没有人知道我可以在我的片段中实现后退按钮,或者在这种情况下如何使用AppCompatActivity。 感谢您的帮助。

+0

你加这个'动作条动作条= getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);'在你的代码中? – Abhi

+0

我正在使用FragmentActivity。 – hahahakebab

+0

好了,你可以通过扩展AppCompatActivity然后执行'appCompatActivity.getSupportActionBar()实现后退按钮setDisplayHomeAsUpEnabled(真);' – Abhi

回答

1

请试试这个,如果你扩展AppCompatActivity

public class MainActivity extends AppCompatActivity { 

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

     //Include these 2 lines ONLY if need to use Toolbar from layout xml as Action Bar 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 

     //Add back navigation in the title bar 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

     // 
     //Other works to be done in onCreate..... 
     // 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if (item.getItemId() == android.R.id.home) { 
      //Title bar back press triggers onBackPressed() 
      onBackPressed(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    //Both navigation bar back press and title bar back press will trigger this method 
    @Override 
    public void onBackPressed() { 
     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStack(); 
     } 
     else { 
      super.onBackPressed(); 
     } 
    } 
} 
1

您是在活动覆盖onBackPressed()托管保存使用通过调用

addToBacktack(空).commit()

所以下一步的调用它的最后片段片段。

@Override 
public void onBackPressed() { 
    if (getFragmentManager().getBackStackEntryCount() > 0){ 
     getFragmentManager().popBackStack(); 
    } 
    else { 
     super.onBackPressed(); 
    } 
} 

所以每当你调用活动的onBackPressed()从片段,该片段会回到上次保存的片段。

+1

嗨, 我根本没有看到标题栏上的后退按钮。并使用您提供附带的错误,“无法解析法‘onBackPressed’”的代码 – hahahakebab

+0

OnBackPressed是在状态栏(软键),而不是在标题栏中的后退按钮。 – Abhi

+1

好的,我的问题是在标题栏中的后退导航。 – hahahakebab

1

要添加后退按钮在标题栏中,您必须将下面的代码添加到您的片段。

Toolbar toolbar = (Toolbar)view.findViewById(R.id.app_bar); 
AppCompatActivity AppCompatActivity = (AppCompatActivity)getActivity(); 
AppCompatActivity.setSupportActionBar(toolbar); 
AppCompatActivity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    return view; 
} 

不要忘了将MainActivity扩展到AppCompatActivity。

然后,必须使用该Java代码在我片段类用户敲击操作栏中的返回/向上图标反应。

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