首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何知道哪个片段是可见的?

如何知道哪个片段是可见的?
EN

Stack Overflow用户
提问于 2018-06-05 01:52:22
回答 1查看 93关注 0票数 -1

我有一个带有片段幻灯片的浏览页,我需要知道哪一个在屏幕上,以便将一些结果返回到正确的字段。如何知道屏幕上有什么?

代码如下:

代码语言:javascript
复制
//Activity
public class ActivityAtendimentoTab extends AppCompatActivity{

    private ResultFragmentsCondutas resultFragmentsCondutas;

    //método para que possa ser passado os valores falados para os fragments.
    public interface ResultFragmentsCondutas {
        void showCondutaResults(ArrayList<String> results);
    }


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

......

        vpPager = (ViewPager) findViewById(R.id.vpPager);
        adapterViewPager = new MyPagerAdapter(getSupportFragmentManager());
        vpPager.setAdapter(adapterViewPager);
        vpPager.addOnPageChangeListener(viewPagerPageChangeListener);
..
   }
}

下面是viewpager,它是一个内部类:

代码语言:javascript
复制
    //ViewPager inner class ActivityAtendimentoTab
    public static class MyPagerAdapter extends FragmentPagerAdapter {
        private static int NUM_ITEMS = 2;

        public MyPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        // Returns total number of pages
        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0: // Fragment # 0 - This will show FirstFragment
                    return new FragmentAvaliacao();
                case 1: // Fragment # 0 - This will show FirstFragment different title
                    return new FragmentReceita()
                default:
                    return null;
            }
        }

        // Returns the page title for the top indicator
        @Override
        public CharSequence getPageTitle(int position) {
            return "Page " + position;
        }

    }

我需要知道屏幕上显示的是哪一个,以便从界面返回一些结果。遵循以下代码:

代码语言:javascript
复制
@Override
public void onResults(Bundle results) {

    //inicializando as variáveis de fragments
    av = (FragmentAvaliacao) getSupportFragmentManager().findFragmentByTag(getString(R.string.tag_fragment_avaliacao));//NULL

    //pegando a lista de comandos
    ArrayList<String> matches = results
            .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);

    //Verifica qual fragment está chamando a interface
    //e passa o valor da string para que seja implementada nos respectivos campos.
    try {
        if (vpPager.getCurrentItem() == 0) {//TRUE
            resultFragmentsCondutas = av;
            resultFragmentsCondutas.showCondutaResults(matches);
}

如何初始化av (示例),始终为空。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 01:59:47

如果我没理解错的话,你需要知道当你滑动它时,哪个片段是可见的。

first选项:

代码语言:javascript
复制
viewPager.addOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {

}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

public void onPageSelected(int position) {

    // Check if this is the page you want by position

  if{position==0){
   //is FragmentAvaliacao() do something
  } else{
   //is FragmentReceita()  do something
  }

}

});

在本例中,int onPageSelected(int位置)检查它是0表示"FragmentAvaliacao()“,还是1表示FragmentReceita()

第二个选项

代码语言:javascript
复制
 @Override
 public void onResults(Bundle results) {

   Fragment page = getSupportFragmentManager().findFragmentByTag("android:switcher:" + R.id.of_your_viewpager + ":" + viewPager.getCurrentItem());

 if (ViewPager.getCurrentItem() == 0 && page != null) {
      ((FragmentAvaliacao)page).showCondutaResults(matches);     
 } 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50686203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档