- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我已经能够在我的 Android 应用程序中实现内置的 NavigationDrawer 而没有任何问题,并且我的所有主要 Fragment 都已设置并在选择时工作。
我卡住的地方是,在某些 fragment 中,我需要在选择一个项目时添加向下钻取类型的功能,例如,一个 fragment 是客户列表,因此选择一个客户应该然后推送到下一个 fragment ,同时仍然为用户提供后退选项(我相信这将通过主页按钮完成)。
我遇到的问题是,使用 NavigationDrawer 模板,主页按钮现在是用于打开/关闭列表的按钮,所以我似乎无法弄清楚我应该如何将主页按钮更改为一个后退按钮,我不确定我是否也正确地呈现了我的下一个 fragment 。下面是在选择时移动到客户详细信息 fragment 的代码(请注意,现在我还没有将任何数据从客户端列表 fragment 传递给客户端数据蛙人,我只想先正确设置导航):
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_clients, container, false);
thisActivity = this.getActivity();
clientListView = (ListView)rootView.findViewById(R.id.clientListView);
return rootView;
}
//later after the list view adapter has been updated with data
clientListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String name = dataList.get(position).clientName;
Log.d("message", "the client clicked on is: " + name);
Fragment fragment = new FragmentClientDetail();
FragmentManager manager = thisActivity.getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.addToBackStack("clientdetail");
transaction.commit();
}
});
所以我的问题主要是,首先我是否通过用新 fragment 替换容器来正确处理导航,其次我需要在我的第二个 fragment 中更改什么以启用后退按钮作为主页按钮而不是抽屉导航?
编辑 1
因此,在 Raghunandan 的评论引导我进行了一些额外的谷歌搜索之后,我能够让 ListView 正确拉出下一个 fragment ,并且正在调用回调方法,但由于某种原因我仍然无法获得 ActionBar 主页按钮从 NavigationDrawer 样式切换到带有后退箭头的普通导航操作栏。现在它仍然默认为仍拉出导航菜单的 NavigationDrawer 类型的按钮。所以基本上我想要完成的是,当我是应用程序的“主要” fragment 时,Home Icon 将执行 NavigationDrawer 操作并拉出要查看的 fragment 列表,但是当向下钻取子 fragment 时,Home图标应切换为后退选项按钮样式的图标。到目前为止,这是我尝试使用 fragment 中的回调方法来推送子 fragment 的方法:
@Override
public void callBackList(String fragmentName, String displayName) {
Log.d("message", "callbacklist called");
mTitle = fragmentName;
displayTitle = displayName;
//Push child fragment on top of current fragment
Fragment fragment = new FragmentClientDetail();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.addToBackStack(null);
//Change action bar style to default action bar style with back button
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
actionBar.setDisplayShowTitleEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeButtonEnabled(true);
actionBar.setTitle(title);
transaction.commit();
//call to update menu icons for child fragments that may be different than parent fragment
invalidateOptionsMenu();
}
最佳答案
是的,您需要根据列表项点击向容器添加/替换 fragment
您可以使用接口(interface)作为 Activity 的回调。
fragment 1-->HostingActivity--> fragment 2。添加确保将 fragment 添加到 backstack。
http://developer.android.com/training/basics/fragments/communicating.html
你可以使用
getActivity().getActionBar().setHomeButtonEnabled(true);
getActivity().getActionBar().setDisplayHomeAsUpEnabled(true);
更多信息@
http://developer.android.com/training/implementing-navigation/ancestral.html
示例:
public interface ListItemCallback
{
public void callBackList()
}
然后在 fragment 中
ListItemCallback mCallback;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
mCallback = (ListItemCallback) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement ListItemCallback");
}
}
然后
clientListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String name = dataList.get(position).clientName;
Log.d("message", "the client clicked on is: " + name);
mCallback.callBackList();
}
});
然后在Activity中
public class MainActivity extends Activity implements ListItemCallback
{
...// rest of the code
@Override
public void callBackList(String name)
{
Fragment fragment = new FragmentClientDetail();
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, fragment);
transaction.addToBackStack("clientdetail");
transaction.commit();
}
}
关于java - 使用 NavigationDrawer 中的 fragment 向下钻取导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22089033/
我看到很多关于在导航栏顶部设置半透明状态栏的问题,如下所示: 但我想要实现的是拥有一个非半透明状态栏,并使抽屉导航标题 View 与操作栏高度相同。这适用于前 Lollipop 设备 (API 21
这是我的代码: 主 Activity package com.pa.homeautomationblank; import android.app.Activity; import android.a
我在旋转菜单时在抽屉导航中动态(以编程方式)创建子菜单时遇到问题。我的导航 View 菜单 xml 仅包含主菜单(见下文)。调用 onCreate 事件时添加子菜单。一切正常,直到我旋转屏幕 - 子菜
我找不到实现非常自定义的 NavigationDrawer 的解决方案。我希望它有一个图像背景(黑色的一个带有白色方 block ),只有很少的项目,如下图所示: 可以制作吗?据我所知,这并不是 SD
我想要的是一个与下面设计中的主要内容无缝连接的 NavigationDrawer: 不知怎么的,我无法从抽屉里取出影子。 我试过的是这样的: drawer.setScrimColor(Color.TR
请帮我创建Toolbar,@+id/left_drawer 上面有哪些内容?是否可以?
是否可以将 NavigationDrawer 用作从上到下而不是从左到右的菜单? 最佳答案 这是 umano 应用的向上滑动面板,我在我的应用中使用了它,您可以轻松地将它转换为从上到下 https:/
我有 NavigationDrawer Activity 。当我单击 ActionBar 中的图标时,NavigationBar 打开,但有滞后。与关闭相同。我使用了本教程:https://www.y
我有一个带有此代码的抽屉导航: mDrawerListView.setAdapter(new ArrayAdapter( getActionBar().getThemedCon
我找不到使用 NavigationDrawer 轻松进行平板电脑多 Pane 布局的方法。 Play 音乐应用可以做到这一点。 我使用了 LOCK_MODE_LOCKED_OPENED 但它会按预期打
我想在我的 Android 项目中有一个 NavigationDrawer,它始终部分显示 ListView,并且这些项目也是可点击的,但是当用户拖动抽屉时,会出现完整的 ListView。 下图是我
根据 Google 指南,建议您仅在安装并打开应用程序后第一次打开 DrawerLayout(向用户展示功能)。 你会怎么做? 它似乎是 openDrawer() 方法与某种偏好的组合。 最佳答案 为
我的 DrawerLayout 设置在两边都有一个抽屉 当某个方法运行时,右边的抽屉会被填充,但是,在该方法运行之前,我可以从右侧滑动,屏幕变暗但什么也没有显示(因为在该方法运行之前布局是空的)。
我对包含两组的菜单有疑问。这种情况是当我从 group_2 中选择任何项目时,从 group_1 中最后选择的项目保持选中/突出显示。 有什么解决办法吗? 抽屉 View .xml:
我一直在尝试解决我遇到的问题,即我无法通过从右向左滑动来关闭 NavigationDrawer,但没有成功。通过从屏幕的左边缘向右滑动来打开它可以正常工作。我目前只是试图合并来自 developer.
我正在将我的应用程序更新为导航架构组件,并且我看到它有一个延迟替换 fragment ,这些 fragment 在 NavigationDrawer 中可见,并且不能顺利关闭。 到目前为止,我一直
我实现了一个基本的navigationDrawer,其中包含一个字符串数组。我希望用户单击列表中的某些内容并转到相应的Activity。然而,我在这里完全不知所措。我已经在这里阅读了很多答案,但仍然不
我创建了一个空 Activity ,然后将其更改为 DrawerLayout,每次打开菜单并单击某个项目时,抽屉都会关闭,但什么也没有发生,就像我只是打开和关闭它一样,无法执行任何其他操作. 这是布局
我是一名 Android 初学者。我正在使用 Android Studio,并使用 NavigationDrawer 创建我的 Activity 。所以我有一个 ListView,但我想向我的抽屉添加
我创建了 NavigationDrawer 类,现在我正在创建扩展抽屉导航类的新 Activity 。不幸的是我经常遇到这样的错误: java.lang.IllegalStateException:
我是一名优秀的程序员,十分优秀!