所以我使用ViewPager让我的应用程序更快,而不是为每个布局使用 活动 。
问题是,在活动中,您可以在 onCreate 中编写代码 它只会在 开始活动 时开始,对吧?
但是当你使用片段和fragmentPagerAdapter并使用ViewPager时。
即使您的ViewPager仅显示第一个片段,您的所有片段也会一起开始(onCreateView)!
如果您是在片段的开头播放声音或动画, 它将在后台启动 !
这是我的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);
}
}
我有这个(第二个片段),我不希望它开始而不被选中!
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的活动:
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);
}
我需要你的帮助才能告诉我这里的错误以及正确的方法
答案 0 :(得分:3)
在View Pager中使用OnPageChangeListener,您可以检测View Viewr中当前显示的片段。然后,您需要检查显示哪个片段,然后在该片段的类上调用一个方法来启动任何声音,例如,在片段是视图中的片段之前,您不想启动它。
你应该使用一个接口。
Here您可以找到使用OnPageChangeListener的示例。
Here您可以使用接口找到Activity to Fragment通信的示例。此示例包含许多与您的用例无关的代码,但演示了接口的使用。
答案 1 :(得分:1)
一种方法可以做到这一点&#34;可能&#34;是在onCreateView中初始化片段的视图:
WHERE
然后在覆盖setUserVisibleHint()函数并在那里进行剩余的初始化。当片段在视图中时调用此函数。
sqldf
我还没有将setuserVisibleHint用于此目的。但你可以尝试一下。我也知道。