玩Android项目开发4------首页(ListView实现文章置顶)
1、文章置顶
在首页的文章页面,我采用的是ListView
,ListView有一个添加头部的API是addHeaderView
,而且是可以累加的,可以根据需求添加头部,排列顺序就是按照添加的顺序,从0开始依次递增。
在头条置顶中,我们还是根据置顶文章的个数来设置置顶Item的个数:
@Override public void showTopArticle(List<TopListBean.DataBean> data) { //设置为置顶View for (int i = 0; i < data.size(); i++) { headerView = getLayoutInflater().inflate(R.layout.item_article_list, null); TextView tv_shares = headerView.findViewById(R.id.tv_shares); TextView tv_time = headerView.findViewById(R.id.tv_time); TextView tv_article_title = headerView.findViewById(R.id.tv_article_title); TextView tv_top = headerView.findViewById(R.id.tv_top); TextView tv_super_chaptername = headerView.findViewById(R.id.tv_super_chaptername); TextView tv_chaptername = headerView.findViewById(R.id.tv_chaptername); TopListBean.DataBean dataBean = data.get(i); tv_shares.setText(dataBean.getAuthor()); tv_time.setText(dataBean.getNiceDate()); tv_article_title.setText(dataBean.getTitle()); tv_top.setVisibility(View.VISIBLE); tv_super_chaptername.setText(dataBean.getSuperChapterName()); tv_chaptername.setText(dataBean.getChapterName()); //设置Item的大小 AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 240); headerView.setLayoutParams(params); lv_main.addHeaderView(headerView); } }
头布局就是我们在适配器中设置的R.layout.item_article_list
Item布局形式,然后根据头条文章的个数,设置头布局的个数,在ListView
的适配器getView()
方法中,做的其实就是下面的操作:得到布局ViewId、然后动态设置数据、设置ItemView的大小。
最终调用addHeaderView
方法将头布局添加进去
lv_main.addHeaderView(headerView);
在设置头布局Item的大小的时候,要注意一点的是,布局管理器要和主View的LayoutParams
一致,主View是ListView
,继承自AbsListView
,如果你使用其他的布局方式,像RelativeLayout
,就会出现类转换异常。
android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
看效果
2、接口回调设置ViewPager
单击监听
这个操作在ViewPager
适配器中进行,在点击Item时,回调当前页面的位置。
public interface onPagerItemClickedListener{ //回调当前页面的位置 void onSelected(int position); } private onPagerItemClickedListener listener; public void setonPagerItemClickedListener(onPagerItemClickedListener listener) { this.listener = listener; }
在生成Item时,给Item设置单击事件监听,回调当前的位置。
@NonNull @Override public Object instantiateItem(@NonNull ViewGroup container, int position) { int realPosition = position % imageList.size(); ImageView imageView = imageList.get(realPosition); imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.onSelected(position); } }); container.addView(imageView); return imageView; }
adapter.setonPagerItemClickedListener(new MainFragmentPagerAdapter.onPagerItemClickedListener() { @Override public void onSelected(int position) { int item = position % imageList.size(); String url = data.get(item).getUrl(); //通过WebView加载页面 loadUrl(url); Toast.makeText(getContext(),"点击了第"+item+"张",Toast.LENGTH_SHORT).show(); } });
ListView有自带的Item单击监听,所以不需要做接口回调。
lv_main.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { String url = list.get(position - headCount).getLink(); loadUrl(url); Toast.makeText(getContext(),"当前点击了"+position+"个Item",Toast.LENGTH_SHORT).show(); } });
这里要注意一点:别忘记我们前面是加了2个HeadView,因此在回调时,位置信息是从HeadView 0-开始的,所以在获取数据信息时,要减去这个HeadView的数量。
HeadrView也只需要设置单击监听即可。
//回调监听 int finalI1 = i; headerView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(getContext(),"单击了第"+ finalI1 +"geItem",Toast.LENGTH_SHORT).show(); } });
3、WebView加载
使用WebView加载url,在使用WebView之前,先做一些设置:
WebSettings webSettings = webview.getSettings();//5.0以上开启混合模式加载if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);}//允许js代码webSettings.setJavaScriptEnabled(true);
通过WebView加载url,调用loadUrl
调用JS端的代码。如果不想跳转到手机自带浏览器加载,那么就新建一个WebViewClient
//加载url地址webview.loadUrl(url);webview.setWebViewClient(new WebViewClient());
在加载Url时,可能不会立刻加载完毕,因此可以设置在加载时显示加载ProgressBar
.
webview.setWebViewClient(new WebViewClient(){ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); //在加载时显示 pb_web.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); //加载完成之后隐藏 pb_web.setVisibility(View.GONE); } });
看看效果:
更多相关文章
- 关于Android的极光推送的消息栏
- Android(安卓)自定义View - 网络加载 ProgressBar 加载与隐藏
- 一起学android之利用回调函数onCreateDialog实现加载对话框(23)
- android手动设置布局
- [置顶] ArcGIS Runtime SDKs 10.2 for iOS & Android& OS X发布
- Android中用ViewPager和Fragment内嵌WebView
- Android(安卓)异步加载——AsyncTask详谈
- RecyclerView机制解析: ItemDecoration
- android中使用gif