我不是android中的高级用户,我不知道这是否是最佳方式,但我的结构有问题。在做webapps和桌面应用程序时,我习惯于将逻辑和表示彼此分开,我尝试在android中执行此操作。
到目前为止,我已经为每个片段中的每个“视图”提供了逻辑,因此我想为每个活动中的每个按钮设置一个onClick函数(因为这是谷歌推荐的),只对每个片段进行方法调用从那里处理逻辑..问题是当我使用导航抽屉和推荐的接口实现时,我无法达到功能,因为我没有实现类,而是朝着片段接口工作。
到目前为止,我已经将其用于处理菜单点击和更改片段:
private void displayFragment(int menuId) {
Fragment fragment = null;
switch (menuId) {
case R.id.nav_search:
fragment = new SearchFragment();
break;
case R.id.nav_create_ticket:
break;
case R.id.nav_logout:
LogoutDialogFragment logoutDialogFragment = new LogoutDialogFragment();
logoutDialogFragment.show(getSupportFragmentManager(), "Logud");
break;
}
//replacing the fragment
if (fragment != null) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.content_fragment_container, fragment);
ft.commit();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
}
所以我当然只能调用从接口实现的方法,而不是我的“searchfragment”类的公共函数。我不认为这是正确的方法,但我想要实现的是什么像这样:
public void searchBtnClicked(View view) {
fragment.searchForLicensePlate();
}
有更好的方法吗?我不认为我应该在searchBtnClicked方法中实例化一个searchfragment,因为片段已经在displayFragment中启动了。
由于
答案 0 :(得分:1)
1.-抽屉(NavigationView)是一个ViewGroup,您可以在其中添加片段然后随意做任何事情。
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
android:background="@drawable/side_nav_bar">
<fragment
android:id="@+id/drawerFragment"
android:name="cl.cutiko.someapp.views.main.drawer.DrawerFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.design.widget.NavigationView>
2.-如果要使用默认实现,则不需要在片段中包含每个函数,您可以使用Presenter并将演示者的结果返回给View。请参阅MVP设计模式here