今日头条小案例

MainActivity主方法

package com.yuan.todaynews;

import java.util.HashMap;
import java.util.Random;

import com.astuetz.PagerSlidingTabStrip;
import com.jeremyfeinstein.slidingmenu.lib.SlidingMenu;
import com.yuan.todaynews.adapter.FragmentAdapter;
import com.yuan.todaynews.adapter.MenuAdapter;
import com.yuan.todaynews.base.BaseActivity;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import android.widget.ToggleButton;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.onekeyshare.OnekeyShare;
import cn.sharesdk.tencent.qq.QQ;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.gui.RegisterPage;

public class MainActivity extends BaseActivity {

    /**
     * 春花雪雨命,                                
     * 夏草风暖心,                                
     * 秋来百花枯,                                
     * 冬去万物苏,                                
     * 四季往反复,                                
     * 谁言心中苦?                                
     * 一天一月又一年,                                    
     * 天天月月又年年                                    
     * ...                                    
     */

    String APPKEYShouJi="15265c97533fc";
    String APPSECRETShouJi="8809e834d31404f9cfebd3b7828810e8";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 隐藏Activity标题栏
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        ShareSDK.initSDK(this);
        /**
         * 图片点击实现侧滑
         */
        ImageView imag_head = (ImageView) findViewById(R.id.imag_head);
        imag_head.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // 侧滑
                initSlidingMenuView();
                //夜间模式
                initButton();
                //短信验证
                initRegister();
                //qq登录
                initLonging();
                //qq分享
                initShare();
                //ListView每条item的点击事件
                initLv();
            }
        });
        // 导航栏效果
        initView();
    }
    /**
     * ListView每条item的点击事件
     */
    private void initLv() {
        ListView menu_lv=(ListView) findViewById(R.id.menu_lv);
        menu_lv.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                switch (position) {
                case 0:
                    Intent intent=new Intent(MainActivity.this, LogingActivity.class);
                    startActivity(intent);
                    break;

                default:
                    Toast.makeText(getApplicationContext(), "哎咿哎咿呦", Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        });
    }
    /**
     * qq分享
     */
    private void initShare() {
        ImageView img_kongjian=(ImageView) findViewById(R.id.img_kongjian);
        img_kongjian.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                OnekeyShare oks = new OnekeyShare();
                // 关闭sso授权
                oks.disableSSOWhenAuthorize();
                // 分享时Notification的图标和文字 2.5.9以后的版本不调用此方法
                // oks.setNotification(R.drawable.ic_launcher,
                // getString(R.string.app_name));
                // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
                oks.setTitle("liuxiyuan521博客");
                // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
                oks.setTitleUrl("http://blog.csdn.net/liuxiyuan521?viewmode=list");
                // text是分享文本,所有平台都需要这个字段
                oks.setText("风吹雨落成花,刹那间走天涯");
                // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
                // oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
                // url仅在微信(包括好友和朋友圈)中使用
                oks.setUrl("http://blog.csdn.net/liuxiyuan521?viewmode=list");
                // comment是我对这条分享的评论,仅在人人网和QQ空间使用
                oks.setComment("我是测试评论文本");
                // site是分享此内容的网站名称,仅在QQ空间使用
                oks.setSite(getString(R.string.app_name));
                // siteUrl是分享此内容的网站地址,仅在QQ空间使用
                oks.setSiteUrl("http://blog.csdn.net/liuxiyuan521?viewmode=list");

                // 启动分享GUI
                oks.show(MainActivity.this);
            }
        });
    }
    /**
     * qq登录
     */
    private void initLonging() {
        ImageView img_qq=(ImageView) findViewById(R.id.img_qq);
        img_qq.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Platform qq = ShareSDK.getPlatform(MainActivity.this, QQ.NAME);
                qq.authorize();
                qq.setPlatformActionListener(new PlatformActionListener() {
                    @Override
                    public void onError(Platform qq, int arg1, Throwable arg2) {
                        // 弹出失败窗口
                        System.out.println("第三方登录失败");
                    }

                    @Override
                    public void onComplete(Platform qq, int arg1, HashMap<String, Object> arg2) {
                        // 跳转
                        Intent intent = new Intent(MainActivity.this, MainActivity.class);
                        startActivity(intent);
                    }

                    @Override
                    public void onCancel(Platform arg0, int arg1) {
                    }
                });
            }
        });
    }
    /**
     * 短信验证
     */
    private void initRegister() {
        SMSSDK.initSDK(getApplicationContext(), APPKEYShouJi, APPSECRETShouJi);
        ImageView img_shouji=(ImageView) findViewById(R.id.img_shouji);
        img_shouji.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                //注册手机号
                RegisterPage rePage=new RegisterPage();
                //注册回调方法
                rePage.setRegisterCallback(new EventHandler(){
                    //事件完成后
                    @Override
                    public void afterEvent(int event, int result, Object data) {
                        //判断结果是否完成
                        if(result==SMSSDK.RESULT_COMPLETE){
                            //获取数据data
                            @SuppressWarnings("unchecked")
                            HashMap<String, Object> maps=(HashMap<String, Object>) data;
                            //国家
                            String country=(String) maps.get("country");
                            //手机号
                            String phone=(String) maps.get("phone");
                            submitUserInfo(country, phone);
                        }
                    }
                });
                //显示注册
                rePage.show(getApplicationContext());
            }
        });
    }
    /**
     * 提交用户信息
     */
    public void submitUserInfo(String country,String phone){
        Random r=new Random();
        String uid=Math.abs(r.nextInt())+"";
        String nickName="LIUXIYUAN";
        SMSSDK.submitUserInfo(uid, nickName, null, country, phone);
    }
    /**
     * 夜间模式
     */
    private void initButton() {
        //按钮初始化
        ToggleButton btn = (ToggleButton) findViewById(R.id.btn_menu_night);
        //点击效果
        btn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // 日间模式
                    dayMode();
                } else {
                    // 夜间模式
                    nightMode();
                }
            }
        });
    }
    /**
     * 导航栏效果
     */
    private void initView() {
        // 导航栏初始化
        PagerSlidingTabStrip pager_tab = (PagerSlidingTabStrip) findViewById(R.id.pager_tab);
        // ViewPager初始化
        ViewPager ViPager = (ViewPager) findViewById(R.id.ViPager);
        // ViewPager适配
        ViPager.setAdapter(new FragmentAdapter(getSupportFragmentManager()));
        // 导航栏与ViewPager连接
        pager_tab.setViewPager(ViPager);
    }

    /**
     * 侧滑
     */
    private void initSlidingMenuView() {
        // 实例化
        SlidingMenu menu = new SlidingMenu(this);
        // 设置侧滑方式
        menu.setMode(SlidingMenu.LEFT);
        // 设置拖拽方式,不可拖
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_MARGIN);
        // 设置宽度
        menu.setBehindOffsetRes(R.dimen.offess);
        // 设置渐变
        menu.setFadeDegree(0.9f);
        // 设置布局文件
        menu.setMenu(R.layout.menu_item);
        // 切记切记,万不可少
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        // 被点击时调用
        menu.showMenu();
        // 适配
        ListView menu_lv = (ListView) findViewById(R.id.menu_lv);
        //取消滚动条
        menu_lv.setVerticalScrollBarEnabled(false);
        menu_lv.setFastScrollEnabled(false);

        menu_lv.setAdapter(new MenuAdapter(getApplicationContext()));

    }
}

头部适配

package com.yuan.todaynews.adapter;

import com.yuan.todaynews.fragment.CaijingFragment;
import com.yuan.todaynews.fragment.GuojiFragment;
import com.yuan.todaynews.fragment.GuoneiFragment;
import com.yuan.todaynews.fragment.JunshiFragment;
import com.yuan.todaynews.fragment.KejiFragment;
import com.yuan.todaynews.fragment.ShehuiFragment;
import com.yuan.todaynews.fragment.ShipingFragment;
import com.yuan.todaynews.fragment.ShishangFragment;
import com.yuan.todaynews.fragment.TiyuFragment;
import com.yuan.todaynews.fragment.TopFragment;
import com.yuan.todaynews.fragment.TuijianFragment;
import com.yuan.todaynews.fragment.YuleFragment;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class FragmentAdapter extends FragmentPagerAdapter {
    // 导航栏里的标题
    String[] title = { "推荐","视频","头条", "社会", "国内", "国际", "娱乐", "体育", "军事", "科技", "财经", "时尚" };

    public FragmentAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return title[position];
    }

    @Override
    public int getCount() {
        return title.length;
    }

    @Override
    public Fragment getItem(int arg0) {
        switch (arg0) {
        case 0:{
            return new TuijianFragment();
        }
        case 1:{
            return new ShipingFragment();
        }
        case 2:{
            return new TopFragment();
        }
        case 3:{
            return new ShehuiFragment();
        }
        case 4:{
            return new GuoneiFragment();
        }
        case 5:{
            return new GuojiFragment();
        }
        case 6:{
            return new YuleFragment();
        }
        case 7:{
            return new TiyuFragment();
        }
        case 8:{
            return new JunshiFragment();
        }
        case 9:{
            return new KejiFragment();
        }
        case 10:{
            return new CaijingFragment();
        }
        case 11:{
            return new ShishangFragment();
        }
        default :
            return null;
        }
    }

}

Fragment布局实例

package com.yuan.todaynews.fragment;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import com.google.gson.Gson;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.yuan.todaynews.R;
import com.yuan.todaynews.WebviewActivity;
import com.yuan.todaynews.adapter.FuAdapter;
import com.yuan.todaynews.bean.NewsHotspot;
import com.yuan.todaynews.bean.NewsHotspot.DataBean;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;

public class ShipingFragment extends Fragment {
    //网络请求地址
    private String URL = "http://ic.snssdk.com/2/article/v25/stream/?category=video&count=20&min_behot_time=1455521349&bd_city=%E5%8C%97%E4%BA%AC%E5%B8%82&bd_latitude=40.049317&bd_longitude=116.296499&bd_loc_time=1455522107&loc_mode=5&lac=4527&cid=28883&iid=3642583580&device_id=11131669133&ac=wifi&channel=baidu&aid=13&app_name=news_article&version_code=460&device_platform=android&device_type=SCH-I919U&os_api=19&os_version=4.4.2&uuid=285592931621751&openudid=AC9E172CE2490000";
    //数据集合
    private ArrayList<DataBean> list=new ArrayList<DataBean>();
    //xListview
    private XListView xLv;
    //多布局适配器
    private FuAdapter adapter;
    //bean包
    private NewsHotspot bean;

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            //为i赋值
            int i = msg.what;
            //为NewsHotspot赋值
            NewsHotspot bean = (NewsHotspot) msg.obj;
            //判断i为几时走的方法
            if (i == 2) {
                //加载
                list.addAll(bean.getData());
            } else if (i == 0) {
                //清除添加
                list.clear();
                list.addAll(bean.getData());
            }
            // 刷新数据
            adapter.notifyDataSetChanged();
            close();
        };
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.top_fragment, container, false);
        xLv = (XListView) v.findViewById(R.id.xLv);

        // 下拉刷新可用
        xLv.setPullRefreshEnable(true);
        // 加载更多可用
        xLv.setPullLoadEnable(true);
        //布局
        adapter = new FuAdapter(getActivity(), list);
        //适配
        xLv.setAdapter(adapter);
        //联网读取,数据初始化
        initData(0);
        //下拉刷新,上拉加载
        xLv.setXListViewListener(new IXListViewListener() {
            //下拉刷新,更新时间
            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @SuppressLint("SimpleDateFormat")
                    public void run() {

                        initData(0);
                        /**
                         * 获取当前时间 yyyy年MM月dd日
                         */
                        SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日  HH:mm");
                        Date curDate = new Date(System.currentTimeMillis());
                        String str = formatter.format(curDate);
                        xLv.setRefreshTime(str);
                    }
                }, 2000);
            }
            //上拉加载
            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    public void run() {
                        initData(2);
                    }
                }, 2000);
            }
        });
        return v;
    }

    private void initData(final int i) {
        // 创建
        HttpUtils hu = new HttpUtils();
        /**
         * 第一参数:请求方式
         * 第二参数:请求网络地址
         * 第三参数:操作结果
         */
        hu.send(HttpMethod.GET, URL, new RequestCallBack<String>() {
            //获取失败
            @Override
            public void onFailure(HttpException arg0, String arg1) {
                Toast.makeText(getActivity(), "解析错误", Toast.LENGTH_SHORT).show();
            }
            //获取成功
            @Override
            public void onSuccess(ResponseInfo<String> result) {
                // 联网返回的json串
                String json = result.result;
                // 创建gson
                Gson gson = new Gson();
                //解析
                bean = gson.fromJson(json, NewsHotspot.class);
                //消息机制
                Message msg = new Message();
                msg.what = i;
                msg.obj = bean;
                handler.sendMessage(msg);
                //点击跳转
                xLv.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        Intent intent = new Intent(getActivity(), WebviewActivity.class);
                        intent.putExtra("url", list.get(arg2 - 1).getUrl());
                        startActivity(intent);
                    }
                });
            }
        });
    }

    protected void close() {
        // 停止加载更多
        xLv.stopLoadMore();
        // 停止刷新
        xLv.stopRefresh();
    }

}
package com.yuan.todaynews.fragment;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import com.google.gson.Gson;
import com.lidroid.xutils.HttpUtils;
import com.lidroid.xutils.exception.HttpException;
import com.lidroid.xutils.http.ResponseInfo;
import com.lidroid.xutils.http.callback.RequestCallBack;
import com.lidroid.xutils.http.client.HttpRequest.HttpMethod;
import com.yuan.todaynews.R;
import com.yuan.todaynews.WebviewActivity;
import com.yuan.todaynews.adapter.FragmentPagerAdapter;
import com.yuan.todaynews.bean.NewsBean;
import com.yuan.todaynews.bean.NewsData;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;
import me.maxwin.view.XListView;
import me.maxwin.view.XListView.IXListViewListener;

public class TopFragment extends Fragment {
    private String URL = "http://v.juhe.cn/toutiao/index?type=top&key=cd94a84c68c7574ff3a57a511e105baf";
    private ArrayList<NewsData> list=new ArrayList<NewsData>();
    private XListView xLv;
    private FragmentPagerAdapter adapter;
    private NewsBean bean;

    @SuppressLint("HandlerLeak")
    Handler handler = new Handler() {
        public void handleMessage(android.os.Message msg) {
            int i = msg.what;
            NewsBean bean = (NewsBean) msg.obj;
            if (i == 2) {
                list.addAll(bean.result.data);
            } else if (i == 0) {
                list.clear();
                list.addAll(bean.result.data);
            }
            // 刷新数据
            adapter.notifyDataSetChanged();
            close();
        };
    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.top_fragment, container, false);
        xLv = (XListView) v.findViewById(R.id.xLv);

        // 下拉刷新可用
        xLv.setPullRefreshEnable(true);
        // 加载更多可用
        xLv.setPullLoadEnable(true);
        //
        adapter = new FragmentPagerAdapter(list, getActivity());
        xLv.setAdapter(adapter);

        initData(0);

        xLv.setXListViewListener(new IXListViewListener() {

            @Override
            public void onRefresh() {
                handler.postDelayed(new Runnable() {
                    @SuppressLint("SimpleDateFormat")
                    public void run() {
                        initData(0);
                        /**
                         * 获取当前时间yyyy年MM月dd日
                         */
                        SimpleDateFormat formatter = new SimpleDateFormat("MM月dd日  HH:mm");
                        Date curDate = new Date(System.currentTimeMillis());
                        String str = formatter.format(curDate);
                        xLv.setRefreshTime(str);
                    }
                }, 2000);
            }

            @Override
            public void onLoadMore() {
                handler.postDelayed(new Runnable() {
                    public void run() {
                        initData(2);
                    }
                }, 2000);
            }
        });
        return v;
    }

    private void initData(final int i) {

        // 创建
        HttpUtils hu = new HttpUtils();
        hu.send(HttpMethod.GET, URL, new RequestCallBack<String>() {

            @Override
            public void onFailure(HttpException arg0, String arg1) {
                Toast.makeText(getActivity(), "解析错误", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onSuccess(ResponseInfo<String> result) {
                // 联网返回的json串
                String json = result.result;
                // 创建gson
                Gson gson = new Gson();
                bean = gson.fromJson(json, NewsBean.class);

                Message msg = new Message();
                msg.what = i;
                msg.obj = bean;
                handler.sendMessage(msg);
                xLv.setOnItemClickListener(new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
                        Intent intent = new Intent(getActivity(), WebviewActivity.class);
                        intent.putExtra("url", list.get(arg2 - 1).url);
                        startActivity(intent);
                    }
                });
            }
        });
    }

    protected void close() {
        // 停止加载更多
        xLv.stopLoadMore();
        // 停止刷新
        xLv.stopRefresh();
    }

}

Web页面

package com.yuan.todaynews;

import com.yuan.todaynews.base.BaseActivity;

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebviewActivity extends BaseActivity {
    private ProgressDialog progressDialog = null;
    private WebView webVi = null;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_webview);
        webVi = (WebView) findViewById(R.id.webVi);
        webVi.getSettings().setJavaScriptEnabled(true);
        webVi.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);

        // intent跳转
        Intent intent = getIntent();
        // 接收传过来的值
        String url = intent.getStringExtra("url");
        webVi.loadUrl(url);

        if (webVi != null) {
            webVi.setWebViewClient(new WebViewClient() {

                @Override
                public void onPageFinished(WebView view, String url) {
                    super.onPageFinished(view, url);
                    progressDialog.dismiss();
                }
            });
            initVIew(url);
        }
    }

    private void initVIew(String uri) {
        if (webVi != null) {
            progressDialog = ProgressDialog.show(WebviewActivity.this, "加载", "正在加载,请稍候!", true);
            webVi.loadUrl(uri);
        }
    }

}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值