【发布时间】:2014-11-03 11:56:10
【问题描述】:
我已经阅读了几个关于这个问题的帖子,但我发现了另一个奇怪的不当行为:
我创建了一个初始页数为 5 的 ViewPager。如果达到页数 2,
pagerAdapter.notifyDataSetChanged();
被调用。 片段都有自己的 id,从 1 开始计数。所以第一个片段获得第一,第二个片段获得第二,依此类推。 每个片段根据其 id 从网络服务器加载图像:
webView.loadUrl("http://myserver/" + id + ".jpg");
现在看来,有时图像大于设备的屏幕宽度。这就是我添加这些行的原因:
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
前 5 个元素看起来非常合适,但是当尝试滑动到下一个片段时,您必须先将 webview 向左滑动大约 3px,然后再次滑动,才能到达下一个片段。 我不知道为什么会这样,但是在最初的 5 张图像之后,它可以正常工作。也许这与一开始我告诉pageradapter有5个片段要显示,滚动后添加更多片段有关。以下这些片段不受此问题的影响。 这是第一个问题。
第二个问题是,在浏览完全正确显示的图像时,有时图像不会适合屏幕。我必须将屏幕转为横向并返回纵向,然后才能正确安装图像。 这怎么会发生,为什么在重绘屏幕时它会起作用,但不是在第一次尝试时?而且它似乎只是偶尔发生。
这是我的两个问题,第一个问题是前 5 个片段的错误拟合最小,第二个问题是滑动时有时不合适的图像,但在重绘屏幕时合适
这是我的主要活动:
public class MyActivity extends ActionBarActivity {
public static int NUM_PAGES = 5;
private ViewPager viewPager;
private CustomPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
viewPager = (ViewPager)findViewById(R.id.activity_my_viewpager);
pagerAdapter = new CustomPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(pagerAdapter);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i2) {
}
@Override
public void onPageSelected(int i) {
if(NUM_PAGES - i <= 2) {
NUM_PAGES+=3;
}
pagerAdapter.notifyDataSetChanged();
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
private class CustomPagerAdapter extends FragmentStatePagerAdapter {
public CustomPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return ScreenFragment.create(position);
}
@Override
public int getCount() {
return NUM_PAGES;
}
}
}
这是片段类:
public class ScreenFragment extends Fragment {
public static final String ARG_PAGE = "ARG_PAGE";
private int pageNumber;
public static ScreenFragment create(int pageNumber) {
ScreenFragment fragment = new ScreenFragment();
Bundle args = new Bundle();
args.putInt(ARG_PAGE, pageNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pageNumber = getArguments().getInt(ARG_PAGE)+1;
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
ViewGroup viewGroup = (ViewGroup)inflater.inflate(R.layout.fragment_screen, container, false);
WebView webView = (WebView)viewGroup.findViewById(R.id.fragment_screen_webview);
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);
webView.loadUrl("http://someserver/" + Integer.toString(number) + ".jpg");
return viewGroup;
}
}
提前致谢
【问题讨论】:
-
请发布一些屏幕截图以便更好地理解.....
标签: android android-fragments webview