把WebView 放到 ViewPager 里面 就可以实现这种效果

解决方案 »

  1.   

    http://www.eoeandroid.com/forum.php?mod=viewthread&tid=264109ViewPager嵌套 WebView 的 这个应该很简单
      

  2.   


    碰到这么一个问题,我现在是一个listview中有10条新闻,我点击某一条进入webview那个界面,但是用了viewpager后每次都是加载第一条,而不是加载当前条,这怎么弄。代码如下。public class ContentActivity extends Activity implements OnPageChangeListener { private WebView contentView;
    private ProgressBar progressBar;
    private ViewPager mPager;
    private List<View> listViews = new ArrayList<View>();
    private MyApplication app; private int position;
    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.content_activity); app = (MyApplication) getApplication();
    getActionBar().setTitle("");
    getActionBar().setDisplayHomeAsUpEnabled(true);
    Drawable b = this.getResources().getDrawable(
    R.drawable.abc_list_longpressed_holo);
    getActionBar().setBackgroundDrawable(b);
    mPager = (ViewPager) findViewById(R.id.vPager);

    mPager.setAdapter(new WebViewPagerAdapter(listViews));

    position = getIntent().getIntExtra("position", 1);

    initView();
    addWebView();
    }


    public void addWebView() {

    new Thread(new Runnable() {

    @Override
    public void run() {
    // TODO Auto-generated method stub
    for (int i = 0; i < app.getNewsDatas().size(); i++) {
    WebView wView = new WebView(this);

    wView.getSettings().setCacheMode(
    WebSettings.LOAD_CACHE_ELSE_NETWORK);
    wView.getSettings().setJavaScriptEnabled(true);
    wView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
    view.loadUrl(url);
    return true;
    } @Override
    public void onPageFinished(WebView view, String url) {
    // TODO Auto-generated method stub
    super.onPageFinished(view, url);
    }
    });
    wView.setHorizontalScrollBarEnabled(false);

    wView.loadUrl(app.getNewsDatas().get(i).getNewsUrl());

    listViews.add(wView);
    }
    }
    }).start();
    }

    public void initView() {
    contentView = (WebView) findViewById(R.id.content_webview);
    contentView.getSettings().setCacheMode(
    WebSettings.LOAD_CACHE_ELSE_NETWORK);
    contentView.getSettings().setJavaScriptEnabled(true);
    contentView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
    // TODO Auto-generated method stub
    view.loadUrl(url);
    return true;
    } @Override
    public void onPageFinished(WebView view, String url) {
    // TODO Auto-generated method stub
    super.onPageFinished(view, url);
    }
    });
    contentView.setHorizontalScrollBarEnabled(false);
    contentView.loadUrl(getIntent().getStringExtra("url"));
    } public void getContent(int parmPosition) {
    contentView.loadUrl(app.getNewsDatas().get(position).getNewsUrl());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.content, menu);
    MenuItem menuItem = menu.findItem(R.id.news_fav);
    DBManager manager = new DBManager(this);
    if (manager.queryFav(getIntent().getIntExtra("id", 0))) {
    menuItem.setIcon(android.R.drawable.star_on);
    } return true;
    } @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.news_fav) {
    DBManager manager = new DBManager(this);
    if (!manager.queryFav(getIntent().getIntExtra("id", 0))) {
    NewsData data = new NewsData();
    data.setNewsId(getIntent().getIntExtra("id", 0));
    data.setNewsTitle(getIntent().getStringExtra("title"));
    data.setNewsUrl(getIntent().getStringExtra("url"));
    data.setNewsImg(getIntent().getStringExtra("img"));
    data.setNewsTime(getIntent().getStringExtra("time"));
    manager.insertToFav(data);
    item.setIcon(android.R.drawable.star_on);
    } else {
    manager.deleteFromFav(getIntent().getIntExtra("id", 0));
    item.setIcon(android.R.drawable.star_off);
    }
    } else if (id == R.id.news_share) {
    Intent shareIntent = new Intent();
    shareIntent.setAction(Intent.ACTION_SEND);
    shareIntent.putExtra(Intent.EXTRA_TEXT,
    getString(R.string.share_app));
    shareIntent.setType("text/plain");
    startActivity(Intent.createChooser(shareIntent,
    getString(R.string.share_title)));
    } else if (id == android.R.id.home) {
    finish();
    overridePendingTransition(R.anim.from_left_in,
    R.anim.from_right_out);
    }
    return super.onOptionsItemSelected(item);
    } @Override
    public void onBackPressed() {
    // TODO Auto-generated method stub
    // super.onBackPressed();
    finish();
    overridePendingTransition(R.anim.from_left_in, R.anim.from_right_out);
    } public void showPre() {
    position -= 1;
    // return app.getNewsDatas().get(position).getNewsUrl();
    } public void showNext() {
    position += 1;
    // return app.getNewsDatas().get(position).getNewsUrl();
    }


    public class WebViewPagerAdapter extends PagerAdapter {
    public List<View> mListViews; public WebViewPagerAdapter(List<View> mListViews) {
    this.mListViews = mListViews;
    } @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
    ((ViewPager) arg0).removeView(mListViews.get(arg1));
    } @Override
    public void finishUpdate(View arg0) {
    } @Override
    public int getCount() {
    return mListViews.size();
    } @Override
    public Object instantiateItem(View arg0, int arg1) {
    ((ViewPager) arg0).addView(mListViews.get(arg1), position);
    return mListViews.get(arg1);
    } @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
    return arg0 == (arg1);
    } @Override
    public void restoreState(Parcelable arg0, ClassLoader arg1) {
    } @Override
    public Parcelable saveState() {
    return null;
    } @Override
    public void startUpdate(View arg0) {
    }
    } @Override
    public void onPageScrollStateChanged(int arg0) {
    // TODO Auto-generated method stub

    }
    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
    // TODO Auto-generated method stub

    }
    @Override
    public void onPageSelected(int arg0) {
    // TODO Auto-generated method stub
    getContent(arg0);
    }}
      

  3.   

    哈哈,你算是遇对人了,我就做过这个,也是用webview,切换的时候加载,和你的完全一样,viewpage不好实现,我是继承linearlayout做的
      

  4.   

    http://download.csdn.net/detail/lulong1985/7443687
    你下载集成一下,有什么问题再说
      

  5.   


    嘿嘿,感谢。我那天那你很久没动静,又自己回去折腾了,还是用viewpager实现的,不过不预先加载。
      

  6.   

    viewpage的好用吗,和webview的滑动有没有冲突
      

  7.   


    没有冲突,之前用viewflipper是有冲突的,要重写webview。
      

  8.   

    大哥,能不能给个demo 小弟最近也在做这个