viewPager와 함께 백 스타를 사용하십시오
-
13-12-2019 - |
문제
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 {
}
}
.
이것이 도움이되거나 나에게 도움이 될 수 있기를 바랍니다.