gpt4 book ai didi

android - 选择 fragment A 时如何不在 ViewPager 上一起启动所有 fragment

转载 作者:行者123 更新时间:2023-11-29 15:36:26 27 4
gpt4 key购买 nike

所以我使用 ViewPager 来让我的应用程序更快,而不是为每个布局使用一个activity

问题是,在 Activity 中,您可以在 onCreate 中编写代码它只会在您开始 Activity 时开始,对吧?

但是当您使用 fragments 和 fragmentPagerAdapter 并为它们使用 ViewPager 时。

即使您的 ViewPager 只显示第一个 fragment ,您所有的 fragment 都将一起开始它们的 (onCreateView)!

如果您在 fragment 的开头播放声音或动画,它将在后台播放!

这是我的 fragmentPagerAdapter 类:

public class PagerAdapter extends FragmentStatePagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitle = new ArrayList<>();

public PagerAdapter(FragmentManager fm) {

super(fm);

}

@Override
public Fragment getItem(int position) {

return mFragmentList.get(position);
}

@Override
public int getCount() {
return mFragmentList.size();
}

public void addFragment(Fragment fragment, String title) {

mFragmentList.add(fragment);
mFragmentTitle.add(title);
}


}

我有这个(第二个 fragment ),我不希望它在没有被选中的情况下开始!

public class GameFragment extends Fragment{
private View gameLayout
private Animation showBtn;
private Button button;


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

gameLayout = inflater.inflate(R.layout.game_layout, container, false);



button = gameLayout .findViewById(R.id.button);


// loading my anim xml file
showBtn = AnimationUtils.loadAnimation(getContext(),R.anim.btn_show);



button.startAnimation(showBtn);

loadLevel();






return gameLayout
}

最后这是我有 ViewPager 的 Activity :

public class ControllerActivity extends AppCompatActivity {

public CustomPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_controller);


viewPager = findViewById(R.id.viewPager);
PagerAdapter adapter = new PagerAdapter(getSupportFragmentManager());

adapter.addFragment(new HomeFragment(),"Home");
adapter.addFragment(new GameFragment(),"Game");
viewPager.setAdapter(adapter);








viewPager.setCurrentItem(0);


}

我需要你的帮助来告诉我这里的错误以及正确的方法是什么

最佳答案

使用 OnPageChangeListener在您的 View Pager 中,您可以检测当前显示在 View Pager 中的 fragment 。然后,您需要检查显示的是哪个 fragment ,然后调用该 fragment 类的方法以启动任何声音,例如您不想在 fragment 显示在 View 中之前开始的任何声音。

你应该为此使用一个接口(interface)。

Here您可以找到使用 OnPageChangeListener 的示例。

Here您可以找到使用接口(interface)的 Activity 到 Fragment 通信的示例。此示例包含很多与您的用例无关的代码,但演示了接口(interface)的使用。

关于android - 选择 fragment A 时如何不在 ViewPager 上一起启动所有 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48765858/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com