私は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);
反応性 方法:
Observable.from(getSupportFragmentManager().getFragments())
.filter(fragment -> fragment.isVisible())
.subscribe(fragment1 -> {
// Do something with it
}, throwable1 -> {
//
});
私の方法は、このようにtry/catchに基づいています。
MyFragment viewer = null;
if(getFragmentManager().findFragmentByTag(MY_TAG_FRAGMENT) instanceOf MyFragment){
viewer = (MyFragment) getFragmentManager().findFragmentByTag(MY_TAG_FRAGMENT);
}
しかし、もっと良い方法があるかもしれません...
さて、この質問は多くの見解と注目を集めましたが、それでも私の最後からの最も簡単な解決策を含んでいませんでした - getFragments()を使うこと。
List fragments = getSupportFragmentManager().getFragments();
mCurrentFragment = fragments.get(fragments.size() - 1);
少し遅れていますが、興味のある人なら誰でも:FragmentManagerで目的のフラグメントのインデックスがわかっている場合は、それを参照してisMenuVisible()関数を確認してください。ここに :
getSupportFragmentManager().getFragments().get(0).isMenuVisible()
true
の場合ユーザーに表示されるなどです。
1)
ft.replace(R.id.content_frame, fragment, **tag**).commit();
2)
FragmentManager fragmentManager = getSupportFragmentManager();
Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_frame);
3)
if (currentFragment.getTag().equals(**"Fragment_Main"**))
{
//Do something
}
else
if (currentFragment.getTag().equals(**"Fragment_DM"**))
{
//Do something
}
SupportFragmentManager
にはfindFragmentById()
というメソッドがあります。以下のようにアクティビティコンテナで使用します。
public Fragment currentFragment(){
return getSupportFragmentManager().findFragmentById(R.id.activity_newsfeed_frame);
}
これが現在のFragment
を取得する方法です。あなたがカスタムのFragment
を持っていて、それがFragment
であることをチェックする必要があるならば、私は通常instanceof
を使います:
if (currentFragment() instanceof MyFrag){
// Do something here
}
コトリンウェイ。
val currentFragment = supportFragmentManager.fragments.last()
Tainy の答えに触発された、これが私の2セントです。他のほとんどの実装からの変更はほとんどありません。
private Fragment getCurrentFragment() {
FragmentManager fragmentManager = myActivity.getSupportFragmentManager();
int stackCount = fragmentManager.getBackStackEntryCount();
if( fragmentManager.getFragments() != null ) return fragmentManager.getFragments().get( stackCount > 0 ? stackCount-1 : stackCount );
else return null;
}
現在のアクティビティである場合、またはアクティビティへの参照を使用する場合は、"myActivity"
を "this"に置き換えます。
Sevの答え あなたが戻るボタンを押すか、そうでなければバックスタックを変更するときのために働きます。
しかし、私は少し違うことをしました。基本フラグメントとその派生フラグメントに対するバックスタック変更リスナーの設定があります。このコードはリスナーにあります。
Fragment f = getActivity().getSupportFragmentManager().findFragmentById(R.id.container);
if (f.getClass().equals(getClass())) {
// On back button, or popBackStack(),
// the fragment that's becoming visible executes here,
// but not the one being popped, or others on the back stack
// So, for my case, I can change action bar bg color per fragment
}
これは現在のフラグメントを取得する簡単な方法です。
getFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
@Override public void onBackStackChanged() {
currentFragment = fragmentManager.findFragmentById(R.id.content);
if (currentFragment != null && (currentFragment instanceof LoginScreenFragment)) {
logout.setVisibility(View.GONE);
} else {
logout.setVisibility(View.VISIBLE);
}
}
});
どのフラグメントがアクティビティのコンテンツフレームにロードされているかを照会して、フラグメントクラス、またはフラグメントの「単純名」(文字列として)を取得できます。
public String getCurrentFragment(){
return activity.getSupportFragmentManager().findFragmentById(R.id.content_frame).getClass().getSimpleName();
}
使用法:
Log.d(TAG, getCurrentFragment());
出力:
D/MainActivity: FragOne
ここに来て、あなたが Kotlinを使っているなら:
var fragment = supportFragmentManager.findFragmentById(R.id.fragment_container)
R.id.fragment_container
は、id
がそのfragment
上に表示されているactivity
です。
あなたがより良い解決策が欲しいならば:
supportFragmentManager.findFragmentById(R.id.content_main)?.let {
// the fragment exists
if (it is FooFragment) {
// The presented fragment is FooFragment type
}
}
この解決策をチェックしてください。現在のフラグメントを取得するのに役立ちました。
if(getSupportFragmentManager().getBackStackEntryCount() > 0){
Android.support.v4.app.Fragment f =
getSupportFragmentManager().findFragmentById(R.id.fragment_container);
if(f instanceof ProfileFragment){
Log.d(TAG, "Profile Fragment");
}else if(f instanceof SavedLocationsFragment){
Log.d(TAG, "SavedLocations Fragment");
}else if(f instanceof AddLocationFragment){
Log.d(TAG, "Add Locations Fragment");
}
これは私の仕事です。これが誰かの助けになることを願っています。
FragmentManager fragmentManager = this.getSupportFragmentManager();
String tag = fragmentManager
.getBackStackEntryAt(
fragmentManager
.getBackStackEntryCount() - 1)
.getName();
Log.d("This is your Top Fragment name: ", ""+tag);
あなたが親アクティビティからFragmentの現在のインスタンスを取得しているなら、あなたはただすることができます
findFragmentByID(R.id.container);
これは実際にはビューに取り込まれているフラグメントの現在のインスタンスです。私は同じ問題を抱えていました。同じフラグメントをバックスタックにしたまま2回ロードする必要がありました。
次の方法はうまくいきません。それはただタグを持つFragmentを取得するだけです。この方法で時間を無駄にしないでください。私はそれがそれを使用していると確信していますが、同じフラグメントの最新バージョンを入手することはそれらの1つではありません。
findFragmentByTag()
final FragmentManager fm=this.getSupportFragmentManager();
final Fragment fragment=fm.findFragmentByTag("MY_FRAGMENT");
if(fragment != null && fragment.isVisible()){
Log.i("TAG","my fragment is visible");
}
else{
Log.i("TAG","my fragment is not visible");
}
私は同様の問題に遭遇しました、そこで、私は何のフラグメントがbackキーが押されたときに最後に表示されたかについて知りたかったです。私は私のために働いた非常に単純な解決策を使いました。 onCreate()メソッドでフラグメントを開くたびに、シングルトンに変数を設定します( "myFragment"をあなたのフラグメントの名前に置き換えます)。
MySingleton.currentFragment = myFragment.class;
変数はシングルトンで次のように宣言されています。
public static Class currentFragment = null;
それからonBackPressed()でチェックします
if (MySingleton.currentFragment == myFragment.class){
// do something
return;
}
super.onBackPressed();
Super.onBackPressed()を必ず呼び出してください。 "return"の後、そうでなければアプリは戻るキーを処理します。私の場合はそれがアプリを終了させました。
スクロールフラグメントの場合、ViewPagerクラスのインスタンスを使用するときにmVeiwPagerを使用すると、mViewPager.getCurrentItem()を呼び出して現在のフラグメントint番号を取得できます。
mainLayout.xml内
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
Android:orientation="vertical"
tools:context="unidesign.photo360.MainActivity">
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:fitsSystemWindows="false"
Android:theme="@style/AppTheme.AppBarOverlay"
app:expanded="false">
<Android.support.v7.widget.Toolbar
Android:id="@+id/main_activity_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_weight="1"
app:popupTheme="@style/AppTheme.PopupOverlay"
app:title="@string/app_name">
</Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>
<Android.support.v4.view.ViewPager
Android:id="@+id/view_pager"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</Android.support.v4.view.ViewPager>
</Android.support.design.widget.CoordinatorLayout>
mainActivity.kt内
class MainActivity : AppCompatActivity() {
lateinit var mViewPager: ViewPager
lateinit var pageAdapter: PageAdapter
// ...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
pageAdapter = PageAdapter(supportFragmentManager)
mViewPager = findViewById(R.id.view_pager)
// ...
}
override fun onResume() {
super.onResume()
var currentFragment = pageAdapter.getItem(mViewPager.currentItem)
// ...
}
getSupportFragmentManager().findFragmentById(R.id.content_frame).getClass().getSimpleName();
まあ、これはこの質問に対する最も簡単な答えだと思います。これがお役に立てば幸いです。
メインアクティビティでは、onAttachFragment(Fragment fragment)メソッドは、新しいフラグメントがアクティビティに添付されたときに呼び出されます。このメソッドでは、現在のフラグメントのインスタンスを取得できます。ただし、onAttachFragmentメソッドは、フラグメントがバックスタックからポップされたとき、つまりスタックの最上部に最上部のフラグメントを取得するためにbackボタンが押されたときには呼び出されません。フラグメントがアクティビティ内に表示されるようになったときにメインアクティビティ内でトリガされるコールバックメソッドをまだ探しています。
私もこの点に固執しました。私が最後にしたことは、フラグメントの配列を宣言したところです。
private static PlaceholderFragment[] arrFrg;
(私の場合はPlaceholderFragmentです)そしてこれらのFragemntsをタグなしでこの配列に詰め込みました:)
public static PlaceholderFragment newInstance(int sectionNumber) {
final PlaceholderFragment fragment = new PlaceholderFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
arrFrg[sectionNumber] = fragment;
return fragment;
}
そうすれば、現在表示されているフラグメントに簡単にアクセスできます。
arrFrg[mViewPager.getCurrentItem()];
私は理解している、これはおそらく最良の解決策ではないが、それは私のために完璧に動作します:)
public Fragment getVisibleFragment() {
FragmentManager fragmentManager = getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null) {
for (Fragment fragment : fragments) {
if (fragment != null && fragment.isVisible())
return fragment;
}
}
return null;
}
これは私のために働きます。フラグメントリストを繰り返す前に、nullチェックを実行する必要があります。フラグメントがスタックにロードされないというシナリオがあるかもしれません。
返されるフラグメントは、スタックに置きたいフラグメントと比較できます。
次のコードを使って現在のフラグメントを取得できます
FragmentClass f = (FragmentClass)viewPager.getAdapter().instantiateItem(viewPager, viewPager.getCurrentItem());
Viewpagerなどの中のviewpagerのようにネストしたフラグメントがあり、すべてのネストしたフラグメントを取得したい場合。
Matt Mombrea answer 少し調整されたバージョンのおかげでそしてありがとう。
private List<Fragment> getVisibleFragments(List<Fragment> searchFragments, List<Fragment> visibleFragments) {
if (searchFragments != null && searchFragments.size() > 0) {
for (Fragment fragment : searchFragments) {
List<Fragment> nestedFragments = new ArrayList<>();
List<Fragment> childFMFragments = fragment.getChildFragmentManager().getFragments();
List<Fragment> fmFragments = fragment.getFragmentManager().getFragments();
fmFragments.retainAll(childFMFragments);
nestedFragments.addAll(childFMFragments);
nestedFragments.addAll(fmFragments);
getVisibleFragments(nestedFragments, visibleFragments);
if (fragment != null && fragment.isVisible()) {
visibleFragments.add(fragment);
}
}
}
return visibleFragments;
}
そしてここに使い方があります:
List<Fragment> allVisibleFragments = getVisibleFragments(searchFragments, visibleFragments);
例えば:
List<Fragment> visibleFragments = new ArrayList<>();
List<Fragment> searchFragments = MainActivity.this.getSupportFragmentManager().getFragments();
Toast.makeText(this, ""+getVisibleFragments(searchFragments, visibleFragments), Toast.LENGTH_LONG).show();
サポートライブラリv13を使用している場合、この問題は修正されているため、単に上書きする必要があります。
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
// TODO Auto-generated method stub
super.setUserVisibleHint(isVisibleToUser);
}
問題は、フラグメントがバージョン4ののフラグメントクラスと互換性がないため、2つを混在させることはできないということです。
そうでなく、V4サポートライブラリを使用している場合は、setPrimaryItemメソッドをFragmentStatePagerAdapterにオーバーライドします。
私はこれを使って大きなリストのActionbatのタイトルを更新しました。
ちょっと変ですが、私はFragmentManager $ FragmentManagerImplを見ました、そして、以下は私のために働きます:
public static Fragment getActiveFragment(Activity activity, int index)
{
Bundle bundle = new Bundle();
String key = "i";
bundle.putInt(key,index);
Fragment fragment=null;
try
{
fragment = activity.getFragmentManager().getFragment(bundle, key);
} catch(Exception e){}
return fragment;
}
最初のアクティブなフラグメントを取得するには、インデックスとして0を使用します。
イベントバス( Otto 、 EventBus 、または RxJavaバス など)を使用すると、これらの状況で特に便利です。
この方法では、現在表示されているフラグメントを必ずしもオブジェクトとして渡す必要はありませんが(それも可能ですが、呼び出しチェーンが長くなります)、現在表示されているフラグメントに対してアクションを実行できます現在表示されているフラグメントを知りたい.
バスに登録されているすべての可視フラグメントは必要なアクションを実行します。
こんにちは私はこれが非常に古い問題であることを知っています、しかし私は私自身の解決策を共有したいと思います..
ユーザーが閲覧したフラグメントリストを取得するために、私はヘルパークラスを作成しました:
public class MyHelperClass{
private static ArrayList<Fragment> listFragment = new ArrayList<>();
public static void addFragment(Fragment f){
if(!existFragment(f)) {
listFragment.add(f);
}
}
public static void removeFragment(){
if(listFragment.size()>0)
listFragment.remove(listFragment.size()-1);
}
public static Fragment getCurrentFragment(){
return listFragment.get(listFragment.size()-1);
}
public static int sizeFragments(){
return listFragment.size();
}
private static Boolean existFragment(Fragment f){
Boolean ret = false;
for(Fragment fragment : listFragment){
if (fragment.getClass() == f.getClass()){
ret = true;
}
}
return ret;
}
そしてメインのActivityに、私はonAttachFragmentメソッドをオーバーライドします
@Override
public void onAttachFragment(Fragment f) {
super.onAttachFragment(f);
MyHelperClass.addFragment(f);
}
また、onBackPressedメソッドをオーバーライドします。
@Override
public void onBackPressed() {
General.removeFragment();
if(General.sizeFragments()>0){
Fragment fragment = null;
Class fragmentClass = General.getCurrentFragment().getClass();
try {
fragment = (Fragment) fragmentClass.newInstance();
fragment.setArguments(General.getCurrentFragment().getArguments());
} catch (Exception e) {
e.printStackTrace();
}
fragmentManager.beginTransaction().replace(R.id.flContent, fragment).commit();
}else{
super.onBackPressed();
}
}
だからこの方法であなたはいつでもMyHelperClass.getCurrentFragment()でアクティブなフラグメントを取得することができます
私はこれが誰にとっても役立つことを願っています
よろしく
クラス変数selectedFragmentを追加して、フラグメントを変更するたびに変数を更新できます。
public Fragment selectedFragment;
public void changeFragment(Fragment newFragment){
FragmentManager fragMgr = getSupportFragmentManager();
FragmentTransaction fragTrans = fragMgr.beginTransaction();
fragTrans.replace(Android.R.id.content, newFragment);
fragTrans.addToBackStack(null);
fragTrans.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
fragTrans.commit();
//here you update the variable
selectedFragment = newFragment;
}
あなたが望むところならどこでもselectedFragmentを使うことができます
おそらく最も簡単な方法は次のとおりです。
public MyFragment getVisibleFragment(){
FragmentManager fragmentManager = MainActivity.this.getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
for(Fragment fragment : fragments){
if(fragment != null && fragment.getUserVisibleHint())
return (MyFragment)fragment;
}
return null;
}
それは私のために働いた
私はごく最近にこれをしなければなりませんでした、そして、ここでの答えのどれも本当にこのシナリオに合いませんでした。
1つのフラグメントだけが表示される (フルスクリーン)と確信している場合は、実際にバックスタックの一番上にあるものを見つけたいと思います。例えば、Kotlin
のFragment
として:
import androidx.fragment.app.Fragment
fun Fragment.setVisibilityChangeListener(clazz: Class<out Fragment>, listener: (Boolean) -> Unit) {
fragmentManager?.run {
addOnBackStackChangedListener {
val topFragmentTag = getBackStackEntryAt(backStackEntryCount - 1).name
val topFragment = findFragmentByTag(topFragmentTag)
listener(topFragment != null && topFragment::class.Java == clazz)
}
}
}
そしてそれを次のように使います。
class MyFragment: Fragment {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setVisibilityChangeListener(this::class.Java) { visible ->
// Do stuff
}
}
}
findFragmentByTag
はそれほど便利ではないことがわかりました。 Activity
または親のFragment
にString currentFragmentTag
がある場合は、それをonSaveInstanceState
に保存してonCreate
に復元する必要があります。たとえそうしても、Activity
が再作成されると、onAttachFragment
はonCreate
の前に呼び出されるので、currentFragmentTag
でonAttachFragment
を使用することはできません(例えば、currentFragmentTag
に基づくビューを更新する)。
私は以下のコードを使います。
Fragment getCurrentFragment() {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
if(fragments.isEmpty()) {
return null;
}
return fragments.get(fragments.size()-1);
}
FragmentManager
の文書は次のように述べています
リスト内のフラグメントの順序は、それらが追加または添付された順序です。
現在のフラグメントタイプに基づいて作業を行う必要がある場合は、getCurrentFragment() instance of MyFragment
ではなくcurrentFragmentTag.equals("my_fragment_tag")
を使用してください。
onAttachFragment
のgetCurrentFragment()
は添付のFragment
を取得するのではなく、前の添付のものを取得します。
これが最良の方法です。
Android.app.Fragment currentFragment=getFragmentManager().findFragmentById(R.id.main_container);
if(currentFragment!=null)
{
String[] currentFragmentName = currentFragment.toString().split("\\{");
if (currentFragmentName[0].toString().equalsIgnoreCase("HomeSubjectFragment"))
{
fragment = new HomeStagesFragment();
tx = getSupportFragmentManager().beginTransaction();
tx.replace(R.id.main_container, fragment);
tx.addToBackStack(null);
tx.commit();
}
else if(currentFragmentName[0].toString().equalsIgnoreCase("HomeStagesFragment"))
{
new AlertDialog.Builder(this)
.setMessage("Are you sure you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
})
.setNegativeButton("No", null)
.show();
}
}
これをヘッダーで定義することを忘れないでください:
private Fragment fragment;
FragmentTransaction tx;
この方法を試してください.....
private Fragment getCurrentFragment(){
FragmentManager fragmentManager = getSupportFragmentManager();
String fragmentTag = fragmentManager.getBackStackEntryAt(fragmentManager.getBackStackEntryCount() - 1).getName();
Fragment currentFragment = getSupportFragmentManager()
.findFragmentByTag(fragmentTag);
return currentFragment;
}
getFragmentManager()が機能しない場合は、getSupportFragmentManager()を試して、フラグメントのロード時にタグを追加します。
public void onBackPressed(){
Fragment fragment=getSupportFragmentManager().findFragmentByTag(/*enter your tag*/);
if(fragment!=null && fragment.isVisible())
{
//do your code here
}
else
{
//do your code here
}
}
よく私はあなたがどのフラグメントにいるのか見たいと思うと思います私はそれが最善だとは思わない解決策があると思いますが - それはうまくいきます まず最初に
fragmentを継承した親フラグメントを作成する必要があります
public class Fragment2 extends Fragment {
private static position;
public static int getPosition() {
return position;
}
public static void setPosition(int position) {
FragmentSecondParent.position = position;
}
}
あなたはそれをすべてのフラグメントでそしてそれぞれの書き込みでonCreateViewで拡張するべきです
setPosition(//your fragmentposition here)
三番
現在のフラグメントを取得したい場所
これを書く
Fragment2 fragment= (Fragment2) getSupportFragmentManager()
.findFragmentById(R.id.fragment_status);
int position = fragment.getPosition();
if(//position condition)
{
//your code here
}