4

ここでトリッキーな質問ですが、明確にしようと思います。

クラス A:extends FragmentActivityおよびFragmentManager

クラス B:extends Fragmentフラグメントの UI を持つ

クラス C: 無関係なクラス

    public class A extends FragmentActivity{
        Fragment fragment = new FragmentActivity();
    }

    public class B extends Fragment{
        public void methodToBeCalled(){
             //do something
}
    }

    public class C{
        //call B's methodToBeCalled() from here
        //note it is not static
    }

私がやりたいのは、クラス C からクラス B にあるメソッドを呼び出すことです。これを行うにはどうすればよいでしょうか?

解決策は、クラス C からこのコードを実行する方法です。

B fragment = (B) getFragmentManager().findFragmentById(R.id.b);

これは機能しません (コンパイルされますが、if ステートメントは常に false です)。

    if (A.getCurrentFragment() instanceof B) {
        B fragment = (B) A.getCurrentFragment();
        fragment.methodToBeCalled();
    }
4

3 に答える 3

0


FragmentTransaction.add(int containerViewId, Fragment fragment, String tag)
またはを使用
FragmentTransaction.replace (int containerViewId, Fragment fragment, String tag)
してフラグメントのタグを設定します

次に、フラグメント インスタンスをタグで確認します。

A.getCurrentFragment().getTag().equals("btag")
于 2013-12-31T19:55:03.630 に答える
0
Step 1 : if class using AsyncTask:

Create a constructor into non-fragment class and parse Fragment Manager:

Step 2:

FragmentManager mFragmentManager;

    // create a constructor
    public NetworkMaster(Activity mMasterActivity){

        this.mFragmentManager = mMasterActivity.getFragmentManager();

    }// end constructor NetworkMaster

Step 3:

protected void onPostExecute(String result) {

            try {

                //ID should same as what you gave while adding the fragment
                SummaryFragment oSummaryFragment = (SummaryFragment)mFragmentManager.findFragmentById(R.id.content_frame); 

                // call public methods of SummaryFragment
                oSummaryFragment.responseFromSummaryUser(result);               

            } catch (Exception e) {
                e.printStackTrace();
            }

        }// end onPostExecute

Step 4: Class the non-fragment class from Fragment:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

NetworkMaster mNetworkMaster = new NetworkMaster(getActivity());
mNetworkMaster.runUserSummaryAsync();

}
于 2014-10-21T11:51:51.183 に答える
0

FragmentActivity のコンテキストをクラス C に渡します。このコンテキストを使用してフラグメント マネージャーを取得し、フラグメント ID またはタグを使用してフラグメントを見つけることができます。

FragmentManager fm = context.getSupportFragmentManager();
//tag should same as what you gave while adding the fragment
FragmentB fb=(FragmentB)fm.findFragmentByTag("tag"); 
// call public methods of FragmentB
fb.CallFromClassC();
于 2013-12-20T09:58:24.730 に答える