【问题标题】:How to access navigate to side navigation menu items(Fragments) programatically?如何以编程方式访问导航到侧导航菜单项(片段)?
【发布时间】:2015-06-23 04:51:15
【问题描述】:

我正在尝试从代码中访问侧面导航抽屉项目,以响应来自侧面导航抽屉中其他片段项目的点击事件。

到目前为止,Google 还没有提供帮助。

编辑:进一步阐述

例如:我在侧导航栏的第一个片段中有一个按钮。我正在尝试访问按钮的 onclick 事件内的侧导航栏的第二个片段。

【问题讨论】:

  • 贴一些相关代码?
  • 您能详细说明一下吗?
  • @petey 我拥有的代码基本上是侧导航抽屉的代码。虽然在这里粘贴它是没有意义的。我正在尝试在这里思考实现的逻辑。
  • @suitdevkar 完成。编辑了问题

标签: android android-side-navigation


【解决方案1】:

您可以在设置适配器时指定项目。根据用户单击的项目,调用 selectItem() 并选择位置“位置”的项目。第一项的索引为零。

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    mDrawerListView = (ListView) inflater.inflate(
            R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            selectItem(position);
        }
    });

    mDrawerListView.setAdapter(new ArrayAdapter<String>(
            getActionBar().getThemedContext(),
            android.R.layout.simple_list_item_activated_1,
            android.R.id.text1,
            str[]));
    mDrawerListView.setItemChecked(mCurrentSelectedPosition, true);
    return mDrawerListView;
}

稍后您还可以通过以下函数获取项目的位置。

private void selectItem(int position) {
    mCurrentSelectedPosition = position;

    MainActivity.EXT_POSITION = position;

    if (mDrawerListView != null) {
        mDrawerListView.setItemChecked(position, true);
    }
    if (mDrawerLayout != null) {
        mDrawerLayout.closeDrawer(mFragmentContainerView);
    }
    if (mCallbacks != null) {
        mCallbacks.onNavigationDrawerItemSelected(position);
    }
}

如果您想根据位置调用不同的片段,那么可以通过使用导航抽屉项目的位置从您的活动中完成。

@Override
public void onNavigationDrawerItemSelected(int position) {
    // update the main content by replacing fragments
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction()
            .replace(R.id.container, MainFragment.newInstance(position + 1))
            .commit();
}

我希望这在某种程度上有所帮助。如果您详细说明您的问题或提出一些您正在尝试使用代码的方法会更好。

【讨论】:

  • 你的 selectItem 方法给了我一个很好的思考方向。所以我在活动中定义了那个方法。对片段中的活动进行强制转换(以防万一),检查 getActivity() 是否是主要活动的实例,然后调用 selectItem 方法,传入项目的位置。
  • 很高兴我能帮上忙。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2016-01-21
  • 2015-03-09
相关资源
最近更新 更多