문제

viewPager를 사용하여 내 Android 앱에서 스 와이프를 구현하고 있습니다.그러나 사용자가 활동을 종료하는 대신 사용자가 뒤로 버튼을 사용하는 경우 이전 조각이 표시되도록합니다.그렇게 할 수있는 방법이 있습니까? 감사 Sebastian

도움이 되었습니까?

해결책

Activity의 기능을 무시합니다.

public class Activity extends Activity
{
    @Override
    public void onBackPressed()
    {
        // do stuff
        myFragment.onBackPressed();
    }
}

public class Fragment extends Fragment
{

    public void onBackPressed()
    {
        // do stuff
    }
}
.

다른 팁

비슷한 문제가있었습니다. 이것은 내가 그것을 해결하는 방법입니다.나는 6 개의 조각이있는 ViewPager를 가지고 있으며 페이지 기록을 추적하고 뒤로 버튼을 사용하여 역사에서 뒤로 탐색 할 수 있도록 원했습니다.java.util.Stack<Integer> 객체를 만들고 (뒤로 단추를 사용하는 경우를 제외하고, 아래를 참조하십시오), onBackPressed()를 override하여 내 역사 스택이 비어 있지 않을 때 뒷면 스택을 사용하는 대신 마지막으로 본 조각을 팝업 할 수 있습니다.

뒤로 버튼을 누를 때 스택의 요소를 누르지 않으려면 결국 종료하는 대신 뒤로 버튼을 계속 사용하는 경우 두 개의 조각 사이에 멈추게됩니다.

내 코드 :

MyAdapter mAdapter;
ViewPager mPager;
Stack<Integer> pageHistory;
int currentPage;
boolean saveToHistory;

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

    mAdapter = new MyAdapter(getSupportFragmentManager());
    mPager = (ViewPager)findViewById(R.id.container);
    mPager.setAdapter(mAdapter);
    mPager.setOffscreenPageLimit(5);

    pageHistory = new Stack<Integer>();
    mPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            if(saveToHistory)
                pageHistory.push(Integer.valueOf(currentPage));
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
    saveToHistory = true;
}

@Override
public void onBackPressed() {
    if(pageHistory.empty())
        super.onBackPressed();
    else {
        saveToHistory = false;
        mPager.setCurrentItem(pageHistory.pop().intValue());
        saveToHistory = true;
    }
};
.

Fragment Activity의 아래의 방법을 재정의하면 문제가 해결되어야합니다.

@Override
public void onBackPressed() {
    if (mViewPager.getCurrentItem() == 0) {
        // If the user is currently looking at the first step, allow the system to handle the
        // Back button. This calls finish() on this activity and pops the back stack.
        super.onBackPressed();
    } else {
        // Otherwise, select the previous step.
        mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1);
    }
}
.

나는 동일한 문제가 있고, 나는이 단계 ( 답변을 편집했다 --- 나에게 일하기, 시도해보십시오 )

ViewPager에서 3 개의 조각이있는 주요 활동에서 스택을 만듭니다. 및 푸시 및 팝 데이터.

private Stack<Integer> stackkk;
private ViewPager mPager;
private int tabPosition = 0;



    mTabLayout.setupWithViewPager(mPager);
    mPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
    mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tabPosition = tab.getPosition();
            mPager.setCurrentItem(tab.getPosition());

// here i have add the data into the stack in each tab click, as at first it will always be null so i add 0 position

            if (stackkk.empty())
                stackkk.push(0);

            if (stackkk.contains(tabPosition)) {
                stackkk.remove(stackkk.indexOf(tabPosition));
                stackkk.push(tabPosition);
            } else {
                stackkk.push(tabPosition);
            }
        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tabPositionUnselected = tab.getPosition();
        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {
        }
    });
}
.

및 작동중인 활동에서

//OnbackPress i have first taken out the last one as it already and
//selected by poping it out then only set to the pager.
@Override
public void onBackPressed() {
    if (stackkk.size() > 1) {
        stackkk.pop();
        mPager.setCurrentItem(stackkk.lastElement());
    } else {
    }
}
.

이것이 도움이되거나 나에게 도움이 될 수 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top