【问题标题】:Can't call fragment method from activity无法从活动中调用片段方法
【发布时间】:2015-08-09 13:20:51
【问题描述】:

我有包含 viewpager 的活动,每个选项卡上都有一些片段。我想从片段中调用一些方法。我正在使用:

android.support.v4.app.Fragment;

我的代码: 主要活动:

public class ProfileActivity extends BaseTabsActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_profile);
        initTabs();
        // call method here
    }
}

    public class BaseTabsActivity extends BaseActivity {

    protected void initTabs() {
        ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
        mViewPager.setOffscreenPageLimit(4);
        mViewPager.setAdapter(new ProfileTabsAdapter(getSupportFragmentManager(), this));
    }
}

ProfileTabsAdapter:

public class ProfileTabsAdapter extends FragmentPagerAdapter {

    public ProfileTabsAdapter(FragmentManager fm, Context context) {
        super(fm);
        this.context = context;
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                return new Fragment0();
            case 1:
                return new Fragment1();
            case 2:
                return new Fragment2();
            case 3:
                return new Fragment3();
            case 4:
                return new Fragment4();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 5;
    }

    @Override
    public CharSequence getPageTitle(int index) {
        switch (index) {
            case 0:
                return context.getResources().getString(R.string.string0);
            case 1:
                return context.getResources().getString(R.string.string1);
            case 2:
                return context.getResources().getString(R.string.string2);
            case 3:
                return context.getResources().getString(R.string.string3);
            case 4:
                return context.getResources().getString(R.string.string4);
        }
        return null;
    }

}

片段:

public class Fragment0 extends Fragment {

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

        View rootView = inflater.inflate(R.layout.fragment, container, false);

        return rootView;
    }


    public String doSomething() {
        return "hi";
    }
}

有什么想法吗?

【问题讨论】:

    标签: android fragment


    【解决方案1】:

    官方文档中有很好的描述:https://developer.android.com/training/basics/fragments/communicating.html

    为方便起见,以下是代码的相关部分:

    ArticleFragment articleFrag = (ArticleFragment)
           getSupportFragmentManager().findFragmentById(R.id.article_fragment);
    
    if (articleFrag != null) {
        // If article frag is available, we're in two-pane layout...
    
        // Call a method in the ArticleFragment to update its content
        articleFrag.updateArticleView(position);
    }
    

    但请务必阅读我在开始时链接的文档。

    【讨论】:

    • "article_fragment" 是片段中根布局的 id?就我而言,它返回 null。
    猜你喜欢
    • 1970-01-01
    • 2013-10-20
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多