安卓仿手机网易新闻app项目开发系列之(六)点击页面跳转和网络路径拼接

来源:互联网 发布:程序员随身携带必备 编辑:程序博客网 时间:2024/06/01 09:38

一.项目简介和思路

终于到最后一章了,不容易啊~~ 上次我们已经实现了点击不同的item返回相应的位置,现在最后我们要做的就是点击不同界面并跳转到相应的新闻页面,而且是和手机相适应的页面,接下来讲讲流程。

二.项目流程

1)点击页面跳转

跳转页面的xml:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.hongaer.molinews.View.MsgActivity">    <WebView        android:id="@+id/webview_msg"        android:layout_width="match_parent"        android:layout_height="match_parent"/>    <include layout="@layout/header"/></RelativeLayout>
  这里用的是webview网页形式的视图------------------------------

<app:android.support.v7.widget.Toolbar android:id="@+id/toolbar_msg"    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="60dp"    android:background="@color/colorPrimaryDark"    app:navigationIcon="@mipmap/e992f21e86250f3478ee7e650ef5a958"    app:titleTextColor="@color/colorwhite"    xmlns:app="http://schemas.android.com/apk/res-auto">    </app:android.support.v7.widget.Toolbar >

 这里是给webview网页的标题栏,用的是toolbar,主要是设置标题的背景颜色、字体大小,关键有个是回退健的设置navigationico,需要给它添加图片 ---------------------------------------------

   然后给回退按键设置点击事件,实现点击后进行返回,很简单,就只需要加一段代码,在msgactivity.java

 Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar_msg);        //设置返回按键可用        setSupportActionBar(toolbar);        getSupportActionBar().setHomeButtonEnabled(true);        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        //设置返回按键触发事件        toolbar.setNavigationOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                    finish();            }

跳转界面主程序  firstpagerfragment.java:

 private void initListener() { adapter.setMyItemClickListener(new FirstPageAdapter.MyItemClickListenter() {                  @Override                  public void onclick(View v, int position) {                      String url= item_list.get(position-1).getUrl();                      Intent intent=new Intent(getActivity(), MsgActivity.class);                      intent.putExtra("url",url);                     startActivity(intent);                      Log.i("888","onclick----------->position"+position);// 在这里获取数据,进行处理                  }              });
在点击监听事件里写实现界面跳转程序,首先是获取点击界面的url,然后通过intent跳转到网页界面msgactivity,并把url网络地址传过去

网页界面  msgactivity.java:

public class MsgActivity extends AppCompatActivity {    WebView webView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_msg);        webView= (WebView) findViewById(R.id.webview_msg);        //打开页面,自适应屏幕        WebSettings webSettings=webView.getSettings();        webSettings.setUseWideViewPort(true);  //设置屏幕比例任意缩放    String url=getIntent().getStringExtra("url");      webView.loadUrl(url);      }   }

此段是网页的界面的程序,主要是设置了网页的自适应属性和获取从 firstpagerfragment传过来的url,然后加载显示。下面是加载出来后的页面效果:



可以看到,由于我们加载的电脑端的网页,所以在手机上显示会有些乱,接下来我们来把电脑格式的网页转化成手机端的

2)网络路径的拼接

因为上面打开的网页都是电脑端的网页,而我们需要的手机格式的网页,所以需要去把电脑版的网页转化成手机版的。怎么做呢?先来看看这两者的路径有什么区别

网页版的url :



手机版:


可以看出来两者格式比较类似,都有着一段数字/,当把网页版的最后数字部分复制到手机版后面数字部分,这时会发现,网页版的格式就变成了手机格式的了:


  所以就按照这样的思路来进行后续的路径拼接。 下面是路径拼接的程序:

 private String getUrlByPosition(int position) {        String oldUrl=getIntent().getStringExtra("url");        StringBuilder url=new StringBuilder();        String num=getMainNum(oldUrl,position);        switch (position){            //http://imil.ifeng.com/ispecial/40089/index.shtml            case 0: //新闻                Log.i("999","i.feng-------------------------->");                url=url.append("http://inews.ifeng.com/").append(num).append("/news.shtml");                break;            case 1://财经                Log.i("777","i.feng-------------------------->");                url=url.append("http://istock.ifeng.com/").append(num).append("/news.shtml");                break;            case 2://体育                url=url.append("http://isports.ifeng.com/").append(num).append("/news.shtml");                break;            case 3://军事                url=url.append("http://imil.ifeng.com/").append(num).append("/news.shtml");                break;            case 4://科技                url=url.append("http://itech.ifeng.com/").append(num).append("/news.shtml");                break;            case 5://历史                url=url.append("http://ihistory.ifeng.com/").append(num).append("/news.shtml");                break;            case 6://凤凰要闻                url=url.append("http://ifenghuanghao.ifeng.com/").append(num).append("/news.shtml");                break;        }
 -----------------------------------------------------------------华丽分割线-------------------------------------

 这部分是获取网页程序最后边那段数字的程序:

//截取中间数字的方法    private String getMainNum(String oldUrl,int index) {        if(index<6) {            oldUrl = oldUrl.substring(oldUrl.lastIndexOf("/") + 1, oldUrl.lastIndexOf("."));            if (oldUrl.contains("_")) {                oldUrl = oldUrl.substring(0, oldUrl.lastIndexOf("_"));            }        }        else{            oldUrl = oldUrl.substring(0,oldUrl.lastIndexOf("/"));            oldUrl = oldUrl.substring(oldUrl.lastIndexOf("/")+1,oldUrl.length());        }           return oldUrl;     }
--------------------------------------------------------------


首先是获取网页形式的url,然后创建一个stringbuilder类型的实例对象,里面有一个append的方法,可以实现字符串的连接。然后调用getmainnum()方法获取网页url的数字部分,最后进行与手机url路径的拼接。拼接代码比较简单,可以对比上面的图片就可以看的懂。主要有个栏目的url需要注意下,就是凤凰号栏目的,它的网页路径格式是这样的:



手机版路径:


  发现它和其他的栏目不同在于网页版路径就只有一个/数字,所以需要给它单独写代码进行截取,只需要先把最后/之前的先截取出来“http://ifenghuanghao.ifeng.com/20135529”,然后在截取/ 到这个字符串的结束,即它的长度下标,就可以把数据提取出来了。

   最后在添下主程序代码:

  

public class MsgActivity extends AppCompatActivity {    WebView webView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_msg);        webView= (WebView) findViewById(R.id.webview_msg);        //打开页面,自适应屏幕        WebSettings webSettings=webView.getSettings();        webSettings.setUseWideViewPort(true);  //设置屏幕比例任意缩放       int position=getIntent().getIntExtra("position",0);        String url=getUrlByPosition(position);        webView.loadUrl(url);        Toolbar toolbar= (Toolbar) findViewById(R.id.toolbar_msg);            //设置返回按键可用            setSupportActionBar(toolbar);            getSupportActionBar().setHomeButtonEnabled(true);            getSupportActionBar().setDisplayHomeAsUpEnabled(true);            //设置返回按键触发事件        toolbar.setNavigationOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    finish();                }        });    }
      主要写了得到position,这个position是在firstpagefragment传过来的mposition,会根据点击不同 tab而变;

还有一个就是根据不同的position来拼接新的手机路径方法:geturlbyposition(),然后返回最终的手机url,最后在执行loadurl(),实现跳转相应的手机页面。看看最终运行的效果:


到这里,新闻客户端系列也就结束了,后续会上传代码到GitHub上,欢迎下载 https://github.com/hongaer24

阅读全文
0 0
原创粉丝点击