aad*_*san 3 android android-fragments android-viewpager
setCurrentItem() 函数不适用于以下 android(java) 代码如何使其工作?
Intent i = getIntent();
int position = i.getIntExtra("img", 0);
viewPager viewPager = (ViewPager) findViewById(R.id.view_pager);
ImageAdapter adapter = new ImageAdapter(this);
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(position);
Run Code Online (Sandbox Code Playgroud)
小智 7
private ViewPager viewPager;
@Override
public void onResume() {
Intent i = getIntent();
int position = i.getIntExtra("img", 0);
viewPager.postDelayed(new Runnable() {
@Override
public void run() {
viewPager.setCurrentItem(position);
}
}, 100);
}
Run Code Online (Sandbox Code Playgroud)
弗兰克是对的。要提供独立的滚动设备,您应该使用 onGlobalLayoutListener。从而可以保证在调用 viewPager.setCurrentItem(position) 时渲染视图。否则 setCurrentItem 不会有任何效果,因为视图尚未呈现。
viewPager.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener()
{
@Override
public void onGlobalLayout()
{
viewPager.setCurrentItem(position, false);
}
});
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经很老了,但也许其他人会发现这很有用!
只需androidx使用视图扩展添加一个较短的答案kotlin
view_pager.doOnLayout {
view_pager.setCurrentItem(position, false)
}
Run Code Online (Sandbox Code Playgroud)
请注意,使用全局布局的先前答案并未删除后记OnGlobalLayoutListener,这是不可取的。
androidxextdoOnLayout就是这样做的。
请确保您有 gradle 依赖项:implementation 'androidx.core:core-ktx:1.3.2'
| 归档时间: |
|
| 查看次数: |
8071 次 |
| 最近记录: |