[英]Call fragment method from another Fragment
There are a few threads on this topic already, but unfortunately I couldn't solve my problem. 这个主题已经有几个主题,但不幸的是我无法解决我的问题。
I have 2 tabs. 我有2个标签。 When one tab is finished I want to update another one. 当一个选项卡完成后,我想更新另一个选项卡。
I tried the following in the first FragmentTab: 我在第一个FragmentTab中尝试了以下内容:
@UiThread
void updateGallery() {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.layout.gallery_layout, new GalleryFragment());
ft.commit();
}
I get the following exception: 我得到以下异常:
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}
and 和
@UiThread
void updateGallery() {
// returns null (ById does also return null)
GalleryFragment frg = (GalleryFragment) getFragmentManager().findFragmentByTag("Gallery");
frg.init();
}
and I also tried to update the necessary data directly: 我还试图直接更新必要的数据:
GalleryFragment gf = new GalleryFragment();
gf.setImageUrls(findDocumentListAll());
gf.getDocumentAdapter().notifyDataSetChanged(); // returns nullpointerexception
From what I read so far the problem may be that I never add a <fragment>
in my main.xml
(MainActivity.java) but add them in my MainActivity
like this: 从我到目前为止读到的问题可能是我从未在main.xml
(MainActivity.java)中添加<fragment>
,但是将它们添加到我的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);
with the Tab Definition in my Adapter like: 使用我的适配器中的选项卡定义,如:
@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
return new GalleryFragment_();
case 1:
return new CameraFragment_();
// ...
}
I'm not sure if that matters, but I always use the android.support.v4.app.Fragment;
我不确定这是否重要,但我总是使用android.support.v4.app.Fragment;
and not the android.app.Fragment;
而不是android.app.Fragment;
You must add a method in your activity with this: 您必须在活动中添加一个方法:
void updateGallery() {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.layout.gallery_layout, fragment).commit();
}
And in your fragment, you can call a method from your activity this way: 在您的片段中,您可以通过以下方式调用活动中的方法:
((ActivityMain) getActivity()).updateGallery();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.