【问题标题】:How to show progress when swiping between fragments?在片段之间滑动时如何显示进度?
【发布时间】:2015-06-28 20:27:58
【问题描述】:

我有一个带有寻呼机适配器的活动,其中包含一些片段。我还在活动顶部创建了一个进度条(水平)。当我浏览片段时,我需要栏显示进度。例如,当我在第一个片段时它应该是灰色的,然后当我在片段中滑动时它会逐渐变大,当我在最后一个片段时它应该是完全绿色的。

ma​​inActivity.java

public class testActivity extends FragmentActivity {

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

    private  void initialisePaging() {
        List<Fragment> fragments = new Vector<Fragment>();
        fragments.add(Fragment.instantiate(this,fragment1.class.getName()));
        fragments.add(Fragment.instantiate(this,fragment2.class.getName()));
        fragments.add(Fragment.instantiate(this,fragment3.class.getName()));
        PagerAdapter mPagerAdapter = new PagerAdapter(this.getSupportFragmentManager(), fragments);

        ViewPager pager = (ViewPager) findViewById(R.id.viewpager);
        pager.setAdapter(mPagerAdapter);

    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.menu_test, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}

PagerAdapter.java

public class PagerAdapter extends FragmentPagerAdapter {

    private List<Fragment> fragments;

    public PagerAdapter(FragmentManager fm, List<Fragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    @Override
    public Fragment getItem(int arg0) {
        return this.fragments.get(arg0);
    }

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

    public void setFragments(List<Fragment> fragments) {
        this.fragments = fragments;
    }
}

【问题讨论】:

    标签: java android android-fragments android-progressbar


    【解决方案1】:

    其实我找到了一个非常简单的答案。这就是我所做的:

      pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
    
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
    
            }
    
            @Override
            public void onPageSelected(int pos) {
              //This is because progress is 0 at the start of the program
              progress++;
              ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar);
                    progress.setProgress(position++);
            }
    
        });
    

    【讨论】:

      【解决方案2】:

      您需要像这样在您的活动中添加OnPageChangeListener ViewPager

      pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
      
          @Override
          public void onPageScrollStateChanged(int arg0) {
      
          }
      
          @Override
          public void onPageScrolled(int arg0, float arg1, int arg2) {
      
          }
      
          @Override
          public void onPageSelected(int pos) {
             // Update the progress bar according to pos
             // Also note that you reach the end when pos == mPagerAdapter.getCount() - 1
             // and that pos starts at 0 - this is the first fragment
          }
      
      });
      

      【讨论】:

      • onPageSelected 之后应该写什么?
      • 您应该更改进度条的颜色。制作一个 int 颜色或颜色 res ID 的数组,并获取该位置的颜色并将其设置为 peogress bar。你能做到吗?
      • 并非如此。不过我会试试的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多