FragmentTabHost及片段 - 我如何通过标签之间的数据?(FragmentTabHost

2019-07-19 17:15发布

我有一个具有FragmentTabHost一个MainActivity(FragmentActivity)。

public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_tabs);
        mTabHost = (FragmentTabHost)findViewById(android.R.id.tabhost);
        mTabHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);

        mTabHost.addTab(mTabHost.newTabSpec("classA").setIndicator("Class A"),
            ClassA.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("classB").setIndicator("Class B"),
            ClassB.class, null);
        mTabHost.addTab(mTabHost.newTabSpec("classC").setIndicator("Class C"),
            ClassC.class, null);
    }
}

ClassA的,ClassB的和ClassC都是片段 (android.support.v4.app.Fragment)。

我需要传递的数据片段(和调用方法)。 我怎样才能得到每个片的参考,像这样的:

ClassA mClassAFragment = ???;

我已经使用getSupportFragmentManager()。findFragmentByTag()试过,我也试着探索mTabHost的能力。 没有什么能得到他们。

您能否提供一个办法做到这一点,或者建议一个替代方法?

Answer 1:

OP在这里。 为了解决这个问题,我已经在超负荷我FragmentActivity的onAttachFragment方法:

public class FragmentTabs extends FragmentActivity {
    private FragmentTabHost mTabHost;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
    }

    @Override
    public void onAttachFragment(Fragment fragment) {
    super.onAttachFragment(fragment);

    if (fragment.getClass() == ClassA.class) {
        ClassA mClassAFragment = (ClassA)fragment
            ...
        }
    }
}


Answer 2:

你可以让你的片段是这样的:

YourFragment frag = (YourFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.fragmentid));

将数据发送到一个片段,你可以按照这个方法,创建一个新的事务,并通过捆绑发送数据。

Bundle arguments = new Bundle();
arguments.putString("some id string", "your data");
YourFragment fragment = new YourFragment();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().add(R.id.fragmentid, fragment).commit();


Answer 3:

这可以通过android.support.v4.app.FragmentTabHost.addTab(则tabspec,类,包参数的第三个参数来实现,则ARGS可以经由android.support.v4.app.Fragment.getArguments检索()

public class Tab1Fragment extends BaseFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // do something with the arguments
    Log.i("DEBUG", "" + getArguments());
    // ...
}

}



文章来源: FragmentTabHost & Fragments - How do I pass data between tabs?