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 语句总是错误的):

    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 回答