Android에서 조각으로 놀고 있습니다.
다음 코드를 사용하여 조각을 변경할 수 있다는 것을 알고 있습니다.
FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
MyFragment myFragment = new MyFragment(); //my custom fragment
fragTrans.replace(android.R.id.content, myFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();
내 질문은 Java 파일에서 현재 표시된 Fragment 인스턴스를 어떻게 얻을 수 있습니까?
답변
트랜잭션에 프래그먼트를 추가 할 때는 태그를 사용해야합니다.
fragTrans.replace(android.R.id.content, myFragment, "MY_FRAGMENT");
… 그리고 나중에 조각이 보이는지 확인하려면 다음을 수행하십시오.
MyFragment myFragment = (MyFragment)getFragmentManager().findFragmentByTag("MY_FRAGMENT");
if (myFragment != null && myFragment.isVisible()) {
// add your code here
}
참조 http://developer.android.com/reference/android/app/Fragment.html
답변
나는 그것이 오래된 게시물이라는 것을 알고 있지만 이전에도 문제가있었습니다. onBackStackChanged()
청취 기능 에서이 작업을 수행하는 솔루션을 찾았습니다.
@Override
public void onBackPressed() {
super.onBackPressed();
Fragment f = getActivity().getFragmentManager().findFragmentById(R.id.fragment_container);
if(f instanceof CustomFragmentClass)
// do something with f
((CustomFragmentClass) f).doSomething();
}
내가 볼 수있는 조각을 찾아야하는 모든 조각을 반복하고 싶지 않기 때문에 이것은 나를 위해 일했습니다. 다른 사람에게도 도움이되기를 바랍니다.
답변
낮은 조각 시나리오에 유용한 솔루션은 다음과 같습니다.
public Fragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null){
for(Fragment fragment : fragments){
if(fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
답변
프래그먼트를 표시 할 때마다 태그를 백 스택에 넣어야합니다.
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.setTransition(FragmentTransaction.TRANSIT_ENTER_MASK);
ft.add(R.id.primaryLayout, fragment, tag);
ft.addToBackStack(tag);
ft.commit();
그런 다음 현재 조각을 가져와야 할 때이 방법을 사용할 수 있습니다.
public BaseFragment getActiveFragment() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
return null;
}
String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName();
return (BaseFragment) getSupportFragmentManager().findFragmentByTag(tag);
}
답변
현재 표시 조각을 찾는 데 사용하는 것은 아래 코드에 있습니다. 그것은 간단하고 지금까지 나를 위해 작동합니다. 조각을 보유하는 활동에서 실행됩니다.
FragmentManager fragManager = this.getSupportFragmentManager();
int count = this.getSupportFragmentManager().getBackStackEntryCount();
Fragment frag = fragManager.getFragments().get(count>0?count-1:count);
답변
코 틀린 방식;
val currentFragment = supportFragmentManager.fragments.last()
답변
반응 방법 :
Observable.from(getSupportFragmentManager().getFragments())
.filter(fragment -> fragment.isVisible())
.subscribe(fragment1 -> {
// Do something with it
}, throwable1 -> {
//
});