新华BBC笔记四
来源:互联网 发布:java object equals 编辑:程序博客网 时间:2024/04/29 22:20
- 布局文件
初始化脚布局
/** * 初始化脚布局 */private void initFooterView() { mFooterView = View.inflate(getContext(), R.layout.refresh_listview_footer, null); this.addFooterView(mFooterView); mFooterView.measure(0, 0);// 测量View mFooterHeight = mFooterView.getMeasuredHeight(); mFooterView.setPadding(0, -mFooterHeight, 0, 0);// 隐藏头布局 setOnScrollListener(this);}
监听是否滑动到底部
/** * 滑动状态发生变化 */@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) { // 快速滑动或者静止时 if (scrollState == SCROLL_STATE_IDLE || scrollState == SCROLL_STATE_FLING) { if (getLastVisiblePosition() == getCount() - 1 && !isLoadMore) { LogUtils.d("到底部了"); isLoadMore = true; mFooterView.setPadding(0, 0, 0, 0); setSelection(getCount());// 设置ListView显示位置 if (mListener != null) { mListener.onLoadMore(); } } }}
加载更多回调方法
/** * 下拉刷新的回调接口 * * @author Kevin * */public interface RefreshListener { /** * 下拉刷新的回调方法 */ public void onRefresh(); /** * 加载更多的回调方法 */ public void onLoadMore();}
加载完成
/** * 当刷新完成后,隐藏下拉刷新控件, 初始化各项数据 */public void onRefreshComplete(boolean needUpdateTime) { if (isLoadMore) { isLoadMore = false; mFooterView.setPadding(0, -mFooterHeight, 0, 0);// 隐藏脚布局 } }
加载更多数据
/** * 加载更多数据 */private void getMoreDataFromNet() { if (mMoreUrl != null) { HttpUtils utils = new HttpUtils(); utils.send(HttpMethod.GET, mMoreUrl, new RequestCallBack<String>() { @Override public void onSuccess(ResponseInfo<String> responseInfo) { processData(responseInfo.result, true); lvList.onRefreshComplete(false);// 隐藏下拉刷新控件 } @Override public void onFailure(HttpException error, String msg) { Log.e(TAG, "请求失败:" + msg); lvList.onRefreshComplete(false);// 隐藏下拉刷新控件 Toast.makeText(mActivity, "加载更多失败", Toast.LENGTH_SHORT) .show(); } }); } else { lvList.onRefreshComplete(false); Toast.makeText(mActivity, "没有更多数据了", Toast.LENGTH_SHORT).show(); }}
解析更多数据
protected void processData(String result, boolean more) { Gson gson = new Gson(); TabDetailBean tabInfo = gson.fromJson(result, TabDetailBean.class); if (!TextUtils.isEmpty(tabInfo.data.more)) { mMoreUrl = GlobalContants.SERVER_URL + tabInfo.data.more; } else { mMoreUrl = null; } if (!more) {// 不加载更多 ..... } else {// 加载更多 ArrayList<News> news = tabInfo.data.news; if (mNewsList != null) { mNewsList.addAll(news); mNewsAdapter.notifyDataSetChanged(); } }}
Item点击
获取Item点击事件(注意position变化)
/** * 设置Item点击监听 */lvList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.d(TAG, "Item点击:" + position); }});----------------------------OnItemClickListener mItemClickListener;/** * 响应Item点击 */@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mItemClickListener != null) { mItemClickListener.onItemClick(parent, view, position - getHeaderViewsCount(), id);// 将原始position减去HeaderView的数量,才是准确的position }}/** * 处理Item点击事件 */@Overridepublic void setOnItemClickListener( android.widget.AdapterView.OnItemClickListener listener) { mItemListener = listener; super.setOnItemClickListener(this);}
标记已读未读
String ids = SharePreferenceUtils.getString(mActivity, PREF_NEWS_READ, "");if (!ids.contains(news.id)) {// 只有在不包含该id时才添加 ids = ids + news.id + ","; SharePreferenceUtils.putString(mActivity, PREF_NEWS_READ, ids);// 更新已读id列表}// mNewsAdapter.notifyDataSetChanged();// 刷新ListViewmNewsAdapter.changeTextColor(view);// 局部刷新ListView-------------------if (ids.contains(getItem(position).id)) {// 如果再已读列表中 holder.tvTitle.setTextColor(Color.GRAY);} else { holder.tvTitle.setTextColor(Color.BLACK);}-------------------/** * 局部刷新TextView * * @param view 被点击的Item对象 */public void changeTextColor(View view) { TextView tvTitle = (TextView) view.findViewById(R.id.tv_news_title); tvTitle.setTextColor(Color.GRAY);}
新闻详情页
页面跳转,传参
布局
- 标题(include)
WebView简介
- 启用js
启用缩放
if (!TextUtils.isEmpty(mUrl)) { WebSettings settings = mWebView.getSettings(); settings.setJavaScriptEnabled(true);// 打开js功能 settings.setBuiltInZoomControls(true);// 显示放大缩小的按钮 settings.setUseWideViewPort(true);// 双击缩放 // mWebView.loadUrl("http://www.itcast.cn"); mWebView.setWebViewClient(new WebViewClient() { // 监听网页加载结束的事件 @Override public void onPageFinished(WebView view, String url) { mProgress.setVisibility(View.GONE); } }); mWebView.loadUrl(mUrl);}
字体缩放
字体选择对话框
/** * 展示修改字体的对话框 */private void showChangeSizeDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(this); String[] items = new String[] { "超大号字体", "大号字体", "正常字体", "小号字体", "超小号字体" }; // 设置单选对话框 builder.setSingleChoiceItems(items, mSelectedSizeIndex, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Log.d(TAG, "选中:" + which); mCurrentSizeIndex = which; } }); builder.setTitle("字体设置");// 设置标题 builder.setPositiveButton("确定", new AlertDialog.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (mCurrentSizeIndex) { case 0: mWebView.getSettings().setTextSize(TextSize.LARGEST);// 设置WebView中字体的大小 break; case 1: mWebView.getSettings().setTextSize(TextSize.LARGER); break; case 2: mWebView.getSettings().setTextSize(TextSize.NORMAL); break; case 3: mWebView.getSettings().setTextSize(TextSize.SMALLER); break; case 4: mWebView.getSettings().setTextSize(TextSize.SMALLEST); break; default: break; } mSelectedSizeIndex = mCurrentSizeIndex; } }); builder.setNegativeButton("取消", null); builder.show();}
分享
ShareSDK
官网: http://www.mob.com/ShareSDK是中国最大的APP内分享服务提供商,ShareSDK社会化分享全面支持微信,微博,QQ空间,来往,易信,Facebook等国内外40个平台
步骤:
- 下载ShareSDK
- 运行SDK工具,生成项目包,进行覆盖
- 查看Android文档
- 创建应用, 生成appkey,替换项目中的appkey
- 拷贝相关权限和代码
- 注意sdcard根目录下需要有test.jpg这张图片,否则会分享失败
- 运行程序,进行测试
可以修改主题样式
OnekeyShare oks.setTheme(OnekeyShareTheme.SKYBLUE);//设置主题样式
注意:
- 微博测试账号: vdisktest4@sina.cn, 12345678
- QQ测试账号: 1810189557, itheima
- zhbj48 appkey:5701c42963ec
轮播条
Handler机制
轮播条实现
if (mHandler == null) { // 创建轮播条的Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) { int item = mViewPager.getCurrentItem(); if (item < mTopNews.size() - 1) { item++; } else {// 判断是否到达最后一个 item = 0; } // Log.d(TAG, "轮播条:" + item); mViewPager.setCurrentItem(item); mHandler.sendMessageDelayed(Message.obtain(), 4000); }; }; mHandler.sendMessageDelayed(Message.obtain(), 4000);// 延时4s发送消息}
按住轮播条,停止轮播
class TopNewsTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: Log.d(TAG, "手指按下"); mHandler.removeCallbacksAndMessages(null);// 移除消息队列中的所有元素 break; case MotionEvent.ACTION_CANCEL:// 事件取消(比如按下后开始移动, // 那么就不会响应ACTION_UP动作了) Log.d(TAG, "事件取消"); mHandler.sendMessageDelayed(Message.obtain(), TOP_NEWS_CHANGE_TIME); break; case MotionEvent.ACTION_UP: Log.d(TAG, "手指抬起"); mHandler.sendMessageDelayed(Message.obtain(), TOP_NEWS_CHANGE_TIME); break; default: break; } return true; }}
轮播条点击事件处理(OnTouch事件被拦截后,就无法响应点击事件了.)
image.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(mActivity, NewsDetailActivity.class); intent.putExtra("news_url", mTopNews.get(position).url); mActivity.startActivity(intent); }});
组图
布局
ListView + GridView + FrameLayout
网络数据获取并解析
ListView数据填充
- item布局实现
- 数据填充
标题栏切换按钮
NewsCenterPager.java/** * 设置当前详情页面 * * @param position */public void setCurrentDetailPager(int position) { Log.d(TAG, "详情页面:" + position); BaseMenuDetailPager detailPager = mMenuDetailPagers.get(position); if (detailPager instanceof PhotosMenuDetailPager) {// 如果是组图页面,就展示组图切换按钮 btnPhotoSwitch.setVisibility(View.VISIBLE); } else { btnPhotoSwitch.setVisibility(View.GONE); } flContent.removeAllViews();// 填充界面前,先把以前的界面清空 flContent.addView(detailPager.mRootView);// 添加当前详情页的布局 detailPager.initData();// 初始化数据 tvTitle.setText(mLeftMenuList.get(position).title);}------------------------------------PhotosMenuDetailPager.java/** * 修改图片展现方式(ListView或者GridView) */private void switchPhotosDisplay() { if (isListShow) { isListShow = false; lvList.setVisibility(View.GONE); gvList.setVisibility(View.VISIBLE); gvList.setAdapter(mAdapter); btnPhotoSwitch.setImageResource(R.drawable.icon_pic_list_type); } else { isListShow = true; lvList.setVisibility(View.VISIBLE); gvList.setVisibility(View.GONE); lvList.setAdapter(mAdapter); btnPhotoSwitch.setImageResource(R.drawable.icon_pic_grid_type); }}
0 0
- 新华BBC笔记四
- 新华BBC笔记二
- 新华BBC笔记三
- 新华BBC笔记五
- 新华BBC笔记六
- bbc
- BBC
- 纪录片---BBC之睡眠十律笔记
- 新华传奇
- BBC 北京四位大学生讲述就业的艰难,注意红字部分!
- BBC&VOA
- BBC系列
- REcord BBC
- 今日BBC
- 今日BBC
- 今日BBC
- 今日BBC
- 今日BBC
- applet没反应
- 自动生成Juint测试类
- 彻底解决APP渠道统计和邀请码之痛点问题
- Azure 媒体服务可将优质内容传输至 Apple TV
- Java 正则校验(手机,邮箱,固话........)
- 新华BBC笔记四
- AeroSpike Java客户端连接读写AS实例
- 理解 OpenStack 高可用(HA)(5):RabbitMQ HA
- 购物车cookie
- MySQL C语言接口-预处理语句
- Python用QQ邮箱发送邮件时授权码问题
- java多态性《上》
- 新华BBC笔记五
- 读《TCP/IP详解》第4、5章:ARP 地址解析协议和RARP 逆地址解析协议