我有这个问题:
目前我使用BottomNavigationView浏览碎片......
代码:
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
//Fragment fragment = null;
Fragment currentFragment = fragmentManager.findFragmentById(R.id.fragment_container_home);
switch (item.getItemId()){
case R.id.ic_home:
if (currentFragment instanceof MainFragment){
//execute code
}
if(fragmentManager.findFragmentByTag("mainMenu") != null) {
//if the fragment exists, show it.
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("mainMenu")).commit();
toolbar.setTitle("Flip");
item = menu.getItem(0);
item.setChecked(true);
} else {
//if the fragment does not exist, add it to fragment manager.
fragmentManager.beginTransaction().add(R.id.fragment_container_home, new MainFragment(), "mainMenu").commit();
toolbar.setTitle("Flip");
item = menu.getItem(0);
item.setChecked(true);
}
//Hide Others Fragments
if(fragmentManager.findFragmentByTag("categories") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("categories")).commit();
}
if(fragmentManager.findFragmentByTag("feedUsers") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("feedUsers")).commit();
}
if(fragmentManager.findFragmentByTag("explore") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("explore")).commit();
}
if(fragmentManager.findFragmentByTag("opcoes") != null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("opcoes")).commit();
}
break;
}
return false;
}
});
我需要什么:
单击时运行一些代码,可见片段就是菜单片段本身。
在这里:
if (currentFragment instanceof MainFragment){
//execute code
}
只有当片段重新出现而没有重新创建时,我才能执行一些代码吗?
另一种方法是访问recyclerview或发送命令以在片段
中执行我需要访问RecyclerView Fragment,以便在BottomNavigationView中点击两次时将其发送到屏幕顶部。
答案 0 :(得分:0)
我想你的方法不止一种
第一种方式,在显示片段后调用所需的代码,非常简单
if(fragmentManager.findFragmentByTag("mainMenu") != null) {
//if the fragment exists, show it.
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("mainMenu")).commit();
toolbar.setTitle("Flip");
item = menu.getItem(0);
item.setChecked(true);
////////////////////////////////////
// execute the code you want here //
////////////////////////////////////
}
第二种方式在显示/隐藏visibility
后,您无法设置fragment
并提前检查visibility
在fragment
展示后添加setVisibility
VISIBLE
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("mainMenu")).commit();
currentFragment.getView().setVisibility(View.VISIBLE);
并在fragment
隐藏后添加setVisibility
GONE
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("categories")).commit();
currentFragment.getView().setVisibility(View.GONE);
并通过
检查Visibility
的{{1}}所需的位置
fragment
如果您无法检查并且无法检查if(currentFragment != null){
if(currentFragment().getView().getVisibility() == View.VISIBLE){
// fragment is shown, do some action
}else {
// fragment is hiden, do some action
}
}
,您可以{1}}每1秒检查一次visibility
或您想要的任何内容...... 。
第三种方式,效率很高。使用Runnable
但Visibility
仅在onResume
未运行时调用,除非您手动调用它。
onResume
然后
fragment
第三种方式的一些费用;
只有当您的片段在运行时未包含值并且您希望保留此值时才使用这种方式,并且不要在运行时使用这些值,除非它们是if(fragmentManager.findFragmentByTag("mainMenu") != null) {
//if the fragment exists, show it.
fragmentManager.beginTransaction().show(fragmentManager.findFragmentByTag("mainMenu")).commit();
toolbar.setTitle("Flip");
item = menu.getItem(0);
item.setChecked(true);
currentFragment().onResume();
}
//Hide Others Fragments
if(fragmentManager.findFragmentByTag("categories") !=
null){
fragmentManager.beginTransaction().hide(fragmentManager.findFragmentByTag("categories")).commit();
currentFragment().onStop();
}
EXP;如果您在运行时从@Override
public void onResume() {
super.onResume();
// your code
}
加载static
到某个imageView
并隐藏bitmap
(就像您在代码中所做的那样),并在您显示某些{{ 1}}再次,您会找到fragment
,因为fragment
正在fragment
中运行,
另一方面,如果您调用终止imageView
并再次启动它,则无法找到位图或fragment
。所以这是使用background
方法。它会停止fragment
(ImageView
和onStop
)中的所有内容并保存,直到fragment
恢复无法启动。
答案 1 :(得分:0)
您可以为此覆盖let currentElement; // Element being edited
let listActions = {
editItem: function() {
currentElement.innerHTML = currentElement.innerHTML.replace(currentElement.innerText, editInput.value);
editInput.value = '';
}
}
let modalControls = {
editModal: function(i) {
// *i* is *this* in *modalControls.editModal(this)*
modalContainer.style.display = 'block';
currentElement = i.parentElement;
modalContainer.getElementsByTagName('input')[0].value = currentElement.innerText;
}
}
。
onHiddenChanged(boolean)