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_listItem布局形式,然后根据头条文章的个数,设置头布局的个数,在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);            }        });

看看效果:

更多相关文章

  1. 关于Android的极光推送的消息栏
  2. Android(安卓)自定义View - 网络加载 ProgressBar 加载与隐藏
  3. 一起学android之利用回调函数onCreateDialog实现加载对话框(23)
  4. android手动设置布局
  5. [置顶] ArcGIS Runtime SDKs 10.2 for iOS & Android& OS X发布
  6. Android中用ViewPager和Fragment内嵌WebView
  7. Android(安卓)异步加载——AsyncTask详谈
  8. RecyclerView机制解析: ItemDecoration
  9. android中使用gif

随机推荐

  1. Android在启动adb时失败解决方案?
  2. android如何判断服务是否正在运行状态
  3. Android虚拟按键的适配
  4. Android(安卓)gallery实现图片的左右循环
  5. android:interpolator
  6. Android4.4 Activity启动流程
  7. Windows下git下载android source
  8. android ndk 使用第三方静态库
  9. 【android】checkedTextView形成自定义Li
  10. Android(安卓)API 中文 (55) —— ListAdap