从另一个片段调用片段方法

时间:2014-03-13 08:57:41

标签: android android-fragments android-tabhost android-tabs android-annotations

这个主题已经有几个主题,但不幸的是我无法解决我的问题。

我有两个标签。当一个选项卡完成后,我想更新另一个选项卡。

我在第一个FragmentTab中尝试了以下内容:

@UiThread
void updateGallery() {
    FragmentTransaction ft = getFragmentManager().beginTransaction();
    ft.replace(R.layout.gallery_layout, new GalleryFragment());
    ft.commit();
}

我得到以下异常:

01-04 02:27:51.805: E/AndroidRuntime(28235): java.lang.IllegalArgumentException: No view found for id 0x7f030002 for fragment GalleryFragment{41d7dcf0 #4 id=0x7f030002}

@UiThread
void updateGallery() {
    // returns null (ById does also return null)
    GalleryFragment frg = (GalleryFragment) getFragmentManager().findFragmentByTag("Gallery");  
    frg.init();
}

我还尝试直接更新必要的数据:

GalleryFragment gf = new GalleryFragment();
gf.setImageUrls(findDocumentListAll());
gf.getDocumentAdapter().notifyDataSetChanged(); // returns nullpointerexception

从我到目前为止所读到的问题可能是我从未在<fragment>(MainActivity.java)中添加main.xml,而是将其添加到我的MainActivity中,如下所示:

MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Gallery").setIndicator("", getResources().getDrawable(R.drawable.gallery)));
MainActivity.AddTab(this, this.mTabHost, this.mTabHost.newTabSpec("Camera").setIndicator("", getResources().getDrawable(R.drawable.camera)));
mTabHost.setOnTabChangedListener(this);
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
mViewPager.setAdapter(mAdapter);
mViewPager.setOnPageChangeListener(MainActivity.this);

使用我的适配器中的选项卡定义,如:

@Override
public Fragment getItem(int index) {

    switch (index) {
        case 0:
            return new GalleryFragment_();
        case 1:
            return new CameraFragment_();
// ...
}

我不确定这是否重要,但我总是使用android.support.v4.app.Fragment;而不是android.app.Fragment;

1 个答案:

答案 0 :(得分:2)

您必须在活动中添加一个方法:

void updateGallery() {
    FragmentManager fragmentManager = getSupportFragmentManager();
    fragmentManager.beginTransaction().replace(R.layout.gallery_layout, fragment).commit();
}

在您的片段中,您可以通过以下方式调用活动中的方法:

((ActivityMain) getActivity()).updateGallery();