gpt4 book ai didi

java - 使用 NavigationDrawer 中的 fragment 向下钻取导航

转载 作者:行者123 更新时间:2023-11-30 09:11:26 24 4
gpt4 key购买 nike

所以我已经能够在我的 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/

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