我在我的应用中实现了ViewPager
以在片段之间滑动。经过长时间的研究,我发现如果我想获得可见片段的位置,我应该使用:
mViewPager.getCurrentItem();
但出于某种原因,当我在第一个或最后一个片段时,位置不会改变。它在第一个片段上保持为1,而不是0,分别为大小 - 2为最后一个,而不是大小 - 1.(对于第一个片段,该理论仅适用于我从一个ViewPager
开始与第一个不同的位置)
如何获取ViewPager的第一个和最后一个位置。我甚至试图从ViewPagerAdapter
发送位置,但在这里我处理相同的事情,因为最后一次更改位置发生在第一个或最后一个片段之前。
有什么建议吗?
答案 0 :(得分:1)
在YourPagerActivity.class中,在create method
中添加侦听器 viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
String positions=position + "";
Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show();
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
答案 1 :(得分:0)
你不能把监听器放到片段上。 将setOnPageChangeListener放入YourPagerActivity.class中的oncreate方法
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_reklamapager);
new yourAdapterAsync().execute();
viewPager = (ViewPager) findViewById(R.id.view_pager);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
String positions=position + "";
Toast.makeText(YourPagerActivity.this, positions, Toast.LENGTH_SHORT).show();
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
并在yourAdapterAsync set startposition
的onpostexecute中protected void onPostExecute(String file_url) {
// dismiss the dialog
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
ImageAdapterFromRes adapter = new ImageAdapterFromRes(YourPagerActivity.this, textArray, urlArray, bitmapArray );
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(startposition);
}
});
答案 2 :(得分:0)
ViewPager.setOnPageChangeListener
现已弃用。需要使用ViewPager.addOnPageChangeListener
代替。
例如,
ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
<强> REFRENCE 强>
答案 3 :(得分:0)
oncreate
leftNav.setVisibility(View.GONE);
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
Log.e("pos","pos "+position);
if (position == 0) {
leftNav.setVisibility(View.GONE);
rightNav.setVisibility(View.VISIBLE);
}else if (position == 5) { //inplace of 5 u can use your dynmic value
leftNav.setVisibility(View.VISIBLE);
rightNav.setVisibility(View.GONE);
}else if (position > 0 || position <5){
leftNav.setVisibility(View.VISIBLE);
rightNav.setVisibility(View.VISIBLE);
}
}
@Override
public void onPageSelected(int position) {
Log.e("poss","poss "+position);
}
@Override
public void onPageScrollStateChanged(int state) {
Log.e("possss","posssss "+state);
}
});