【问题标题】:Viewpager position retrieve when same activity in openedViewpager 位置检索时打开相同的活动
【发布时间】:2018-03-03 08:33:41
【问题描述】:

我想要的应用程序如下: 当用户单击其中一个按钮时,它会转到另一个包含卡片堆栈视图分页器的卡片活动,用户将读取卡片并在卡片完成后刷卡。然后会出现另一张卡片。如果他回到主要活动并回到卡片活动,那么卡片活动应该从他离开的卡片开始。

这是我的viewpager初始化:

 //Viewpager initialization
    mViewPager = (ViewPager)findViewById(R.id.viewpager);
    CardStackAdapter mAdapter = new CardStackAdapter(getSupportFragmentManager());
    mViewPager.setPageTransformer(true,new CardStackTransformer());
    mViewPager.setOffscreenPageLimit(6);
    mViewPager.setPadding(0,0,0,10);
    mViewPager.setAdapter(mAdapter);

这是适配器:

 public class CardStackAdapter extends FragmentStatePagerAdapter{

    public CardStackAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                return new overview1();
            case 1:
                return new overview2();
            case 2:
                return new overview2();
            case 3:
                return new overview2();
            case 4:
                return new overview2();
            case 5:
                return new overview2();
            default:
                    break;
        }
        return null;
    }

    @Override
    public int getCount() {
        return 6;
    }

}

这是我的整个活动

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class overview extends AppCompatActivity {

private ViewPager mViewPager;

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt("ViewPagerPosition",mViewPager.getCurrentItem());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_overview);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    this.setTitle("");
    this.getSupportActionBar().setHomeAsUpIndicator(R.mipmap.ic_close_white_24dp);
    this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);


    //Viewpager initialization
    mViewPager = (ViewPager)findViewById(R.id.viewpager);
    CardStackAdapter mAdapter = new CardStackAdapter(getSupportFragmentManager());
    mViewPager.setPageTransformer(true,new CardStackTransformer());
    mViewPager.setOffscreenPageLimit(6);
    mViewPager.setPadding(0,0,0,10);

    mViewPager.setAdapter(mAdapter);

    if(savedInstanceState!=null){
        int lastPosition = savedInstanceState.getInt("ViewPagerPosition",0);
        mViewPager.setCurrentItem(lastPosition);
    }

}


public class CardStackAdapter extends FragmentStatePagerAdapter{

    public CardStackAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch(position){
            case 0:
                return new overview1();
            case 1:
                return new overview2();
            case 2:
                return new overview2();
            case 3:

                return new overview2();
            case 4:
                return new overview2();
            case 5:
                return new overview2();
            default:
                    break;
        }
        return null;
    }

    @Override
    public int getCount() {
        return 6;
    }

}


private class CardStackTransformer implements ViewPager.PageTransformer
{
    @Override
    public void transformPage(View page, float position)
    {
        if(position>=0)
        {
            page.setScaleX(0.93f - 0.015f * position);

            page.setScaleY(0.93f);

            page.setTranslationX(- page.getWidth()*position);

            page.setTranslationY(10 * position);
        }

    }
}
}

【问题讨论】:

  • 尝试 StartActivityForResult 而不是 startActivity()
  • 你能详细说明一下吗?

标签: android android-fragments android-viewpager android-cardview android-pageradapter


【解决方案1】:

您应该尝试在 onSaveInstanceState() 中保存 Activity 的状态并在 onCreate() 中恢复它:

@Override
protected void onSaveInstanceState(Bundle instanceState) {
    super.onSaveInstanceState(instanceState);
    instanceState.putInt("viewPagerPosition", viewPager.getCurrentItem());
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    //after setting the adapter
    if (savedInstanceState != null) {
        int lastPosition = savedInstanceState.getInt("viewPagerPosition", 0);
        viewPager.setCurrentItem(lastPosition);
    }
}

【讨论】:

  • 感谢回复我会试试的
  • 是的,我会让你知道的
  • 你能在某处显示活动的整个代码吗?
  • 看,我已经编辑了包含整个活动的问题@Szymon Chaber
  • 我现在发现我第一次犯了一个错误 - 你能检查我的编辑版本吗?
猜你喜欢
  • 1970-01-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-26
相关资源
最近更新 更多