我在我的應用程序中有10個不同的片段。我需要將導航抽屜(抽屜佈局)隱藏在少數片段中,如何從片段訪問抽屜佈局並隱藏它?我知道我們需要在活動mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
中使用,但如何在碎片中完成它?如何從片段中禁用或隱藏抽屜佈局Android
回答
你可以做這樣的事情在你的片段:
private MainActivity main;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
main = (MainActivity) activity;
}
你一定要避免這種情況!
mutch更好的解決方案將使用一個接口在您的Main和片段之間進行通信。你最終會像這樣的東西:
public interface MyInterface {
public void lockDrawer();
public void unlockDrawer();
}
主營:
public class DetailViewActivity extends AppCompatActivity implements MyInterface {
@Override
public void lockDrawer() {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
@Override
public void unlockDrawer() {
mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
}
}
片段:
public class MyFragment extends Fragment {
private MyInterface myInterface;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
myInterface = (MyInterface) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement MyInterface");
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
// Inflate the layout for this fragment
myInterface.lockDrawer();
return inflater.inflate(R.layout.example_fragment, container, false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
myInterface.unlockDrawer();
}
}
爲什麼這是最好的解決辦法:如果你做這樣的事情((HomeActivity)毫無疑問),你將無法重複使用你的片段。 將會有一個ClassCastException。爲了重用你的Fragment,你應該使用一個接口,而不是投你MainActivity。因此,每個使用 的活動都可以簡單地實現此界面。即使沒有DrawerLayout,你也可以使用它。所以最大的努力就是可重用性。
寫你的活動中,如下所示一個公共方法 - -
public void enableDisableDrawer(int mode) {
if (mDrawerLayout != null) {
mDrawerLayout.setDrawerLockMode(mode);
}
}
,然後裏面片段的onResume
,你可以調用這個和改變抽屜鎖模式需要
您可以使用此方法鎖定或解鎖抽屜:DrawerLayout.setDrawerLockMode(...)
。 (此方法還有另外兩個版本,用於指定特定抽屜的鎖定模式。)要鎖定,請使用DrawerLayout.LOCK_MODE_LOCKED_CLOSED
;解鎖,使用DrawerLayout.LOCK_MODE_UNLOCKED
。
如果您使用的是ActionBarDrawerToggle,則需要添加一些額外的代碼,以防止在您鎖定抽屜時單擊ActionBarDrawerToggle時打開抽屜。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// check lock mode before passing to ActionBarDrawerToggle
// I assume your drawer is on the left; if not, use Gravity.RIGHT
int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
參考鏈接瞭解更多信息link here
我知道這一點。我的問題是,我怎樣才能從活動訪問它的形式片段。 –
創建您的活動兩種方法。一個用於打開抽屜,另一個用於關閉抽屜。見下面的代碼。
3210現在打電話從片段上述方法類似下面
((MainActivity)getActivity()).closeNavigationDrawer(); // to close drawer
((MainActivity)getActivity()).openNavigationDrawer(); // to open drawer
((MainActivity)getActivity()).lockNavigationDrawer(); // to lock drawer
((MainActivity)getActivity()).unLockNavigationDrawer(); // to unlock drawer
這將工作。也沒有好的做法 - 活動和片段之間的溝通,你應該總是使用一個接口 –
您可以通過以下方式做到這一點 -
((HomeActivity) mActivity).enableDisableDrawer(DrawerLayout.LOCK_MODE_UNLOCKED);
OR
((HomeActivity) mActivity).enableDisableDrawer(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
其中mActivity是我的活動參考。
這種方式正在爲我工作。
我不會推薦這個原因 - 你以這種方式失去了碎片的可重用性 –
您可以使用此方法來鎖定或解鎖抽屜:DrawerLayout.setDrawerLockMode(...)。 (此方法還有另外兩個版本,用於指定特定抽屜的鎖定模式。)要鎖定,請使用DrawerLayout.LOCK_MODE_LOCKED_CLOSED;要解鎖,請使用DrawerLayout.LOCK_MODE_UNLOCKED。
如果您使用的是ActionBarDrawerToggle,則需要添加一些額外的代碼,以防止在您鎖定抽屜時單擊ActionBarDrawerToggle時打開抽屜。
enter code here
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// check lock mode before passing to ActionBarDrawerToggle
// I assume your drawer is on the left; if not, use Gravity.RIGHT
int lockMode = mDrawer.getDrawerLockMode(Gravity.LEFT);
if (lockMode == DrawerLayout.LOCK_MODE_UNLOCKED &&
mDrawerToggle.onOptionsItemSelected(item)) {
return true;
}
// Handle your other action bar items...
return super.onOptionsItemSelected(item);
}
- 1. android:導航抽屜中的片段或上下文佈局
- 2. 我的片段隱藏導航抽屜?
- 3. 帶抽屜佈局的片段管理
- 4. 導航抽屜中的片段佈局Android應用程序
- 5. 帶有碎片的Android抽屜佈局
- 6. 在框架佈局隱藏片段android
- 7. 在Android中爲現有地圖片段添加抽屜佈局
- 8. 如何從一側禁用抽屜佈局?
- 9. Android抽屜佈局在片段內容下顯示
- 10. 如何將碎片佈局與導航抽屜佈局結合
- 11. Android:在抽屜佈局中使用地圖擴展片段時出錯
- 12. 如何隱藏抽屜佈局的工具欄,仍然可以使用打開的抽屜按鈕(三行)?
- 13. 導航抽屜片段只適用於ListView控件佈局
- 14. 將鏈接片段鏈接到抽屜佈局中的項目
- 15. 隱藏Android軟鍵盤當點擊導航抽屜中的片段
- 16. 滑動抽屜隱藏片段的最後一行GridView
- 17. Android - 抽屜佈局 - 關閉抽屜導致空指針異常
- 18. 滑動抽屜隱藏ListView
- 19. 在導航抽屜中,如何在從片段調用片段時刷新標題和抽屜列表?
- 20. 如何隱藏Android中的佈局
- 21. Android Studio不會顯示抽屜佈局
- 22. Android小吃店在抽屜式佈局
- 23. Android抽屜佈局未顯示
- 24. Android材質設計抽屜佈局
- 25. Android的抽屜多圖佈局
- 26. Android Studio的默認Nagivatinal抽屜佈局
- 27. Android的抽屜佈局找不到R.layout.drawer_list
- 28. 如何聲明片段隱藏在XML佈局中
- 29. 在片段全屏高度內做抽屜佈局
- 30. Admobs與抽屜佈局重疊片段列表視圖
謝謝你。它的工作完美。 – sivaprakash