




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
新闻客户端讲师:杨光福微博:/321chinavideo Day41_自定义ListView(加载更多)-4201_添加角布局 1_初始化和隐藏代码在RefreshListView构造方法中调用/* * 添加角布局 * param context */private void initFooterView(Context context) View footerView = View.inflate(context, R.layout.refresh_listview_footer, null);/隐藏代码footerView.measure(0, 0);int footerViewHeight = footerView.getMeasuredHeight();footerView.setPadding(0, -footerViewHeight, 0, 0);this.addFooterView(footerView);2_布局文件refresh_listview_footer.xml 02_拖动到底部的时候显示角1_拖动到底部显示加载更多布局/* * 当滚动状态改变的时候触发此方法 * */Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) /当停止滚动时或者惯性滚动时,ListView的最后一个显示的条目:getCount()-1if(scrollState = SCROLL_STATE_IDLE|scrollState = SCROLL_STATE_FLING)if(getLastVisiblePosition() =(getCount()-1)/滑动到最后一个可以看到的ItemSystem.out.println(滑动到最后一个可以看到的Item);isLoadingMore = true;/把底部加载显示footerView.setPadding(0, 0, 0, 0);setSelection(getCount();/调用if(mOnRefreshListener !=null)mOnRefreshListener.onLoadingMore(); Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) /* * 自定义刷新接口 * */public interface OnRefreshListener/* * 当下拉刷新的时候回调这儿方法 */public void onPullDownRefresh();/* * 当加载更多的时候回调这个方法 */public void onLoadingMore();/* * 当数据请求成功或者失败的时候,状态还原 */public void onRefreshFinish(boolean isSuccess)/判断是否是加载更多if(isLoadingMore)footerView.setPadding(0, -footerViewHeight, 0, 0);isLoadingMore = false;else/隐藏下拉刷新控件refreshHeaderView.setPadding(0, -headerViewHeight, 0, 0);currentState = PULL_DOWN_REFRESH;ivArrow.clearAnimation();mProgressBar.setVisibility(View.INVISIBLE);ivArrow.setVisibility(View.VISIBLE);tvState.setText(下拉刷新);if(isSuccess)/设置更新时间tvTime.setText(最后刷新的时间:+getSystemTime(); 2_联网请求加载更多数据 /* * 菜单页面对应的新闻页签页面 * 总共有12个 * author Administrator * */public class TabMenuDetailPager extends MenuDetailBasePager implements OnPageChangeListener /* * 新闻中心-新闻菜单对应的标签对应的数据 */private NewCenterTag newCenterTag;./* * 加载更多数据的URL */private String moreUrl; /* * 是否加载更多数据中 */protected boolean isLoadingMore = false; . Overridepublic View initView() View view = View.inflate(mActivity, R.layout.tab_detail, null);/把View注入到XUtils框架中ViewUtils.inject(this, view);./设置监听下拉刷新mListView.setOnRefreshListener(new OnRefreshListener() Overridepublic void onPullDownRefresh() isPullDownRefreshing = true;getDataFromNet(); Overridepublic void onLoadingMore() if(TextUtils.isEmpty(moreUrl)Toast.makeText(mActivity, 没有更多数据了, 1).show();mListView.onRefreshFinish(false);else/有更多数据,要加载更多数据了getMoreDataFromNet(););return view;/* * 加载更多数据 */protected void getMoreDataFromNet() HttpUtils httpUtils = new HttpUtils();httpUtils.send(HttpMethod.GET, moreUrl, new RequestCallBack() Overridepublic void onSuccess(ResponseInfo responseInfo) System.out.println(加载更多数据成功:+responseInfo.result);mListView.onRefreshFinish(false);isLoadingMore = true;processData(responseInfo.result); Overridepublic void onFailure(HttpException error, String msg) mListView.onRefreshFinish(false);System.out.println(加载更多数据失败:+ msg);); /* * 处理和解析json数据 * param json */protected void processData(String json) TabDetailBean bean = parserJson(json);if(!isLoadingMore)System.out.println(bean.data.news.get(0).title);topnews = bean.data.topnews;/给ViewPager设置适配器TabDetailAdapter adapter = new TabDetailAdapter();mViewPager.setAdapter(adapter);/ 把所有的View清除ll_point_group.removeAllViews();for(int i=0;itopnews.size();i+)View point = new View(mActivity);LayoutParams params = new LayoutParams(5, 5) ; point.setBackgroundResource(R.drawable.tab_detail_point_bg);if(i!=0)params.leftMargin = 10;point.setEnabled(false);point.setLayoutParams(params);ll_point_group.addView(point);previousPointPosition = 0;/设置默认的图片描述和指示点mtv_title_description.setText(topnews.get(previousPointPosition).title);ll_point_group.getChildAt(previousPointPosition).setEnabled(true);/设置页面改变的监听mViewPager.setOnPageChangeListener(this);/设置适配器和对应的数据newsLists = bean.data.news;listViewAdapter = new ListViewAdapter();mListView.setAdapter(listViewAdapter);/mListView.addHeaderView(v);/把一个视图一头的方式添加到ListView中else/把列表新闻取出来,在加载到以前的集合中,在刷新数据isLoadingMore = false;List moreDataNews = bean.data.news;newsLists.addAll(moreDataNews);listViewAdapter.notifyDataSetChanged();/刷新数据. /* * 用Gson开源项目解析json * param json */private TabDetailBean parserJson(String json) Gson gson = new Gson();TabDetailBean bean = gson.fromJson(json, TabDetailBean.class);moreUrl = bean.data.more;if(TextUtils.isEmpty(moreUrl)moreUrl = null;elsemoreUrl = ConstantUtils.server_url+moreUrl;return bean; Overridepublic void onPageScrollStateChanged(int arg0) / TODO Auto-generated method stub Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) / TODO Auto-generated method stub. 2_新闻详情页面-49 01_设置点击某一条后变灰色1_以数组方式记录点击后的id/* * 新闻ID数组key */private String READ_NEWS_ID_ARRAY_KEY = read_news_id_array_key; Overridepublic View initView() View view = View.inflate(mActivity, R.layout.tab_detail, null);/把View注入到XUtils框架中ViewUtils.inject(this, view);./设置点击某一条的监听mListView.setOnItemClickListener(new OnItemClickListener() Overridepublic void onItemClick(AdapterView parent, View view,int position, long id) int realPosition = position -1;News newsItem = newsLists.get(realPosition);System.out.println(标题:+newsItem.title+,id:+newsItem.id);/读取之前保存的,如果数组里面没有包含当前的id,就在之前的id数组后边加上当前的id,并且保存起来。String readNewsIdArray = CacheUitls.getString(mActivity, READ_NEWS_ID_ARRAY_KEY, );if(!readNewsIdArray.contains(newsItem.id)String currentValues = ;if(TextUtils.isEmpty(readNewsIdArray)/第一次点击,没有任何idcurrentValues = newsItem.id +, ;else/已经有id保存过了,就在末尾添加新的id,最终变成数组currentValues = readNewsIdArray + newsItem.id +, ;/把这条新闻的id存储起来CacheUitls.putString(mActivity, READ_NEWS_ID_ARRAY_KEY, currentValues);/刷新适配器listViewAdapter.notifyDataSetChanged(););return view;2_适配器里修改class ListViewAdapter extends BaseAdapter . /* * 实例每一个Item */Overridepublic View getView(int position, View convertView, ViewGroup parent) .String readNewsIdArray = CacheUitls.getString(mActivity, READ_NEWS_ID_ARRAY_KEY, );if(readNewsIdArray.contains(news.id)holder.tv_news_list_title.setTextColor(Color.GRAY);elseholder.tv_news_list_title.setTextColor(Color.BLACK);return view;02_新闻详情页面1_创建新闻详情页面NewsDetailActivity数据接收1_创建新闻详情页面/* * 新闻详情页面 * author Administrator * */public class NewsDetailActivity extends Activity Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);String url = getIntent().getStringExtra(url);System.out.println(url:+url); 2_在功能清单文件注册和数据的传递 /进入新闻详情页面Intent intent = new Intent(mActivity,NewsDetailActivity.class);intent.putExtra(url, newsItem.url);mActivity.startActivity(intent); 2_创建新闻详情页面布局文件1_详情页面布局文件activity_news_detail.xml 2_基于title_bar.xml修改 3_NewsDetailActivity代码初始化布局文件 /* * 新闻详情页面 * author Administrator * */public class NewsDetailActivity extends Activity implements OnClickListener private String url; Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_news_detail);url = getIntent().getStringExtra(url);initView(); /* * 初始化View */private void initView() /设置隐藏findViewById(R.id.ib_content_fragment).setVisibility(View.GONE);findViewById(R.id.tv_content_fragment).setVisibility(View.GONE);/设置显示findViewById(R.id.ib_content_back).setVisibility(View.VISIBLE);findViewById(R.id.ib_title_bar_text_size).setVisibility(View.VISIBLE);findViewById(R.id.ib_title_bar_share).setVisibility(View.VISIBLE);/设置点击事件findViewById(R.id.ib_content_back).setOnClickListener(this);findViewById(R.id.ib_title_bar_text_size).setOnClickListener(this);findViewById(R.id.ib_title_bar_share).setOnClickListener(this);WebView webView = (WebView) findViewById(R.id.wv_news_detail_content);webView.loadUrl(url); Overridepublic void onClick(View v) switch (v.getId() case R.id.ib_content_back:/返回break;case R.id.ib_title_bar_text_size:/设置文字大小break;case R.id.ib_title_bar_share:/分享break; default:break; 4_设置加载效果1_布局文件修改 2_代码里面修改 /* * 初始化View */private void initView() /设置隐藏.final ProgressBar progressBar = (ProgressBar) findViewById(R.id.pb_news_detail);WebView webView = (WebView) findViewById(R.id.wv_news_detail_content);/设置监听页面加载完成,完成的时候吧Progerssbar隐藏调用webView.setWebViewClient(new WebViewClient() Overridepublic void onPageFinished(WebView view, String url) super.onPageFinished(view, url);progressBar.setVisibility(View.GONE););webView.loadUrl(url); 5_设置支持javaScript脚步语言 /设置WebView属性的类WebSettings setting = webView.getSettings();/设置支持javaScriptsetting.setJavaScriptEnabled(true); 6_设置支持双击缩放 1_想设置地址 Overrideprotected void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);setContentView(R.layout.activity_news_detail);url = getIntent().getStringExtra(url);url = ;initView(); 2_支持双击缩放 /设置WebView属性的类WebSettings setting = webView.getSettings();/设置支持javaScriptsetting.setJavaScriptEnabled(true);/启用页面上放大缩小按钮setting.setBuiltInZoomControls(true);/启用页面双击缩放功能setting.setUseWideViewPort(true);webView.loadUrl(url); 3_webview字体修改-19 /* * 新闻详情页面 * author 杨光福 * */public class NewsDetailActivity extends Activity implements OnClickListener /* * 加载新闻详情页面的Url */private String url;/* * 设置文字的大小,默认是正常 */private int currentSelectTextSize = 2;/* * 临时的选择字体大小 */private int tempSelectTextSize = 2;private WebSettings setting; Overridepublic void onClick(View v) switch (v.getId() case R.id.ib_content_back:/返回finish();break;case R.id.ib_news_detail_text_size:/设置文字大小showChangeTextSizeDialog();break;case R.id.ib_news_detail_text_share:/分享break; default:break; /* * 弹出改变字体大小的对话框 */private void showChangeTextSizeDialog() AlertDialog.Builder builder = new Builder(this);builder.setTitle(选择字体大小);final String items = 超大号字体,大号字体,正常字体,小号字体,超小号字体;builder.setSingleChoiceItems(items, currentSelectTextSize, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) System.out.println(items:+itemswhich);tempSelectTextSize = which;/currentSelectTextSize = which;);builder.setPositiveButton(确定, new DialogInterface.OnClickListener() Overridepublic void onClick(DialogInterface dialog, int which) currentSelectTextSize = tempSelectTextSize;changeTextSize(currentSelectTextSize););builder.setNegativeButton(取消, null);builder.show(); /* * 设置文字的大小 * param currentSelectTextSize */protected void changeTextSize(int currentSelectTextSize) switch (currentSelectTextSize) case 0:/超大号字体setting.setTextSize(TextSize.LARGEST);break;case 1:/大号字体setting.setTextSize(TextSize
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 街道消防安全事件的应急预案
- 表设备采购招标文件
- 江苏省南通市海安高级中学2024-2025学年高一下学期6月阶段检测地理试卷(含答案)
- 河北省石家庄市第四十中学2024-2025学年七年级下学期期中生物试题(含答案)
- 财务会计子系统的解决方案(一)
- 2025年广东省深圳市育才二中中考英语三模试卷(含答案)
- 幼儿心理学教案得力文库
- 2024-2025学年下学期高二生物人教版期末必刷常考题之种群及其动态
- 2024-2025学年下学期高一生物沪科版期末必刷常考题之基因重组造成变异的多样性
- 建筑施工特种作业-建筑起重机械安装拆卸工(施工升降机)真题库-4
- 新修订《黄河保护法》PPT
- 北斗卫星导航发展及其的应用课件
- 过敏性休克应急预案演练记录表
- 第八章-三相异步电动机的电力拖动课件
- 工程施工停止点检查表
- 《灭火器维修》GA95-2015(全文)
- 高中美术素描教案(8篇)
- 市政工程监理规划范本(完整版)
- 国贸实验一进出口价格核算
- 幼儿园中班美术:《美丽的蝴蝶》 PPT课件
- 单片机芯片8279用法
评论
0/150
提交评论