gpt4 book ai didi

Android 抽屉导航显示较低级别 fragment 的指示器

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:37 26 4
gpt4 key购买 nike

我在将抽屉导航功能切换到较低级别 fragment 的向上功能时遇到了一些问题。我读过this thread设法显示向上指示器。但是当按下按钮时,它会打开抽屉导航而不是返回到上一个 fragment 。而且我无法将 EditUserFragment 中的操作栏标题设置为“编辑个人资料”。我正在使用 Android Studio 中提供的抽屉导航模板。

我有三个层次:

  1. MainActivity 带有由主页和个人资料项组成的抽屉导航
  2. UserFragment 标题为“Profile”,其中有一个选项可以调出 EditUserFragment
  3. EditUserFragment(下层 fragment )由 UserFragment
  4. 触发


主 Activity

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

drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(this, drawerLayout,
R.drawable.ic_launcher, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
}

@Override
public void onBackPressed() {
super.onBackPressed();
// this won't change the drawer indicator back
drawerToggle.setDrawerIndicatorEnabled(true);
// this works
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}

public void onSectionAttached(int number) {
// Show the corresponding title on the action bar when clicked and open corresponding
// fragments.
Fragment fragment = null;

switch (number) {
case 1:
mTitle = getString(R.string.title_home);
break;
case 2:
mTitle = getString(R.string.title_profile);
fragment = new UserFragment();
break;
}

if (fragment != null) {
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, fragment).commit();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (!mNavigationDrawerFragment.isDrawerOpen()) {
// Only show items in the action bar relevant to this screen
// if the drawer is not showing. Otherwise, let the drawer
// decide what to show in the action bar.
getMenuInflater().inflate(R.menu.main, menu);
restoreActionBar();
return true;
}
return super.onCreateOptionsMenu(menu);
}

public void restoreActionBar() {
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setTitle(mTitle);
}

public void setActionBarTitle(String title){
getActionBar().setTitle(title);
Log.d("Title 2", getActionBar().getTitle().toString());
}

onBackPressed 在我按下手机上的后退按钮(不是操作栏上的向上按钮)时部分工作(在代码中注释)。


用户 fragment

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
setHasOptionsMenu(true);

// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_profile, container, false);

drawerLayout = (DrawerLayout) getActivity().findViewById(R.id.drawer_layout);
drawerToggle = new ActionBarDrawerToggle(getActivity(), drawerLayout,
R.drawable.ic_launcher, R.string.navigation_drawer_open,
R.string.navigation_drawer_close);

return view;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_edit:
drawerToggle.setDrawerIndicatorEnabled(false);
// Disable sliding from edge to open drawer
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
getFragmentManager().beginTransaction()
.replace(R.id.container, new EditUserFragment())
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
.addToBackStack(null)
.commit();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

EditUserFragment

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
((MainActivity) getActivity()).setActionBarTitle("Edit Profile");
Log.d("Title", getActivity().getActionBar().getTitle().toString());
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Get item selected and deal with it
Log.d("KEY: ", String.valueOf(item.getItemId()));
switch (item.getItemId()) {
case android.R.id.home:
Log.d("EditUserFragment", "I'm here");
getActivity().onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

getActivity().getActionBar().setDisplayHomeAsUpEnabled(true); 按预期工作,向上插入符显示而不是抽屉;虽然在点击它时,它会打开抽屉而不是返回到上一个 fragment 。此外,case android.R.id.home 下的代码永远不会执行。我尝试将操作栏标题从“配置文件”设置为“编辑配置文件”。日志向我显示“编辑个人资料”,但实际运行的应用程序出于某种原因向我显示“个人资料”。


我想要实现的是能够通过点击向上指示器(现在向上指示器正在打开抽屉导航)从 EditUserFragment 返回到 UserFragment。并在 EditUserFragment 中显示正确的标题。

非常感谢任何帮助!!

最佳答案

经过几天的分析,我发现问题是我在创建它时使用了内置的抽屉导航 Activity 。内置将任务分为两部分。 MainActivityNavigationDrawerFragment。因此,MainActivity 中的 drawerToggleNavigationDrawerFragment 中的真实对象不同。

最初,MainActivty 调用NavigationDrawerFragment 来设置抽屉导航所需的所有内容。我通过在我的 MainActivity 中实现抽屉导航来解决这个问题,所以我将只有一个 drawerToggle。但是,如果我在 NavigationDrawerFragment 而不是 MainActivity 中拥有所有内容(抽屉导航变量),我仍然无法找到使其工作的方法。如果有人知道这个问题的答案,请随时发表评论!

关于Android 抽屉导航显示较低级别 fragment 的指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25336952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com