选择片段A时,如何不在ViewPager上一起启动所有片段

时间:2018-02-13 11:33:57

标签: android android-fragments android-viewpager

所以我使用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);


    }

我需要你的帮助才能告诉我这里的错误以及正确的方法

2 个答案:

答案 0 :(得分:3)

在View Pager中使用OnPageChangeListener,您可以检测View Viewr中当前显示的片段。然后,您需要检查显示哪个片段,然后在该片段的类上调用一个方法来启动任何声音,例如,在片段是视图中的片段之前,您不想启动它。

你应该使用一个接口。

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

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

答案 1 :(得分:1)

一种方法可以做到这一点&#34;可能&#34;是在onCreateView中初始化片段的视图:

WHERE

然后在覆盖setUserVisibleHint()函数并在那里进行剩余的初始化。当片段在视图中时调用此函数。

sqldf

我还没有将setuserVisibleHint用于此目的。但你可以尝试一下。我也知道。