WanAndroid实战——内容显示

作者: Tom_Ji | 来源:发表于2019-04-03 17:38 被阅读10次

    前情回顾:

    1.WanAndroid实战——首页Banner

    2.WanAndroid实战——首页文章

    目前已经能够展示首页文章和banner图了,但是却无法显示文章的内容,就像给了一个美味的蛋糕,却不让你吃,现在,我们就来吃蛋糕(再不吃就过保质期了)。

    显示文章内容.gif

    内容展示Activity

    既然要展示内容,而这些内容都是通过网页来显示的,这里选择使用开源框架AgentWeb

    1.在build.gradle里添加依赖。

        implementation 'com.just.agentweb:agentweb:4.0.2'
        implementation 'com.just.agentweb:download:4.0.2'
    

    2.创建用来展示内容的WebViewActivity.java,这里选择继承自AppCompatActivity而不是BaseActivity,创建完成后会自动生成对应的布局文件。

    3.修改布局文件,这里直接给出布局文件代码。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".view.WebViewActivity">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolBar"
            style="@style/ToolBarStyle"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_constraintBottom_toTopOf="@id/web_content"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            >
    
            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:ellipsize="marquee"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:marqueeRepeatLimit="-1"
                android:singleLine="true"
                android:textColor="@color/white"
                android:textSize="@dimen/actionbar_title_size"
                tools:text="@string/app_name"
                />
    
        </android.support.v7.widget.Toolbar>
    
    
        <LinearLayout
            android:id="@+id/web_content"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:orientation="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toBottomOf="@id/toolBar"
            />
    
    </android.support.constraint.ConstraintLayout>
    

    这里的toolBar的title我加了一个跑马灯的效果,如果觉得low,或者不希望无限循环,可以自己修改里面的属性值。添加的原因是为了展示全内容,并且不希望换行显示。这个布局文件整体来说还是很简单的。

    4.完善WebViewActivity.java

    从效果来看,需要有一个返回按钮,一个加载进度条,一个内容展示的界面,因为使用AgentWeb,只需要关心返回按钮的添加即可。

    package com.tom.wanandroid.view;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.ActionBar;
    import android.support.v7.app.AppCompatActivity;
    import android.support.v7.widget.Toolbar;
    import android.view.MenuItem;
    import android.widget.LinearLayout;
    import android.widget.TextView;
    
    import com.just.agentweb.AgentWeb;
    import com.tom.wanandroid.Constant;
    import com.tom.wanandroid.R;
    
    import butterknife.BindView;
    import butterknife.ButterKnife;
    import butterknife.Unbinder;
    
    /**
     * <p>Title: MainModel</p>
     * <p>Description: 内容展示界面</p>
     *
     * @author tom
     * @date 2019/3/29 10:54
     **/
    public class WebViewActivity extends AppCompatActivity {
    
        Unbinder mBinder;
    
        @BindView(R.id.web_content)
        LinearLayout mWebContent;
    
        protected AgentWeb mAgentWeb;
        @BindView(R.id.title)
        TextView mTitle;
        @BindView(R.id.toolBar)
    
        Toolbar mToolBar;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_web_view);
    
            mBinder = ButterKnife.bind(this);
            Intent intent = getIntent();
            String title = intent.getStringExtra(Constant.ARTICLE_TITLE);
            String url = intent.getStringExtra(Constant.ARTICLE_URL);
            setUpActionBar(title);
    
            mAgentWeb = AgentWeb.with(this)
                    .setAgentWebParent(mWebContent, new LinearLayout.LayoutParams(-1, -1))
                    .useDefaultIndicator()
                    .createAgentWeb()
                    .ready()
                    .go(url);
    
        }
    
        /**
         * <p>设置actionbar的title</p>
         *
         * @param title title
         */
        private void setUpActionBar(String title) {
    
            setSupportActionBar(mToolBar);
            ActionBar actionBar = getSupportActionBar();
            if (actionBar != null) {
                actionBar.setHomeAsUpIndicator(R.drawable.back_selector);
                actionBar.setDisplayHomeAsUpEnabled(true);
                actionBar.setDisplayShowTitleEnabled(false);
                mTitle.setText(title);
            }
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            if (item.getItemId() == android.R.id.home) {
                finish();
            }
    
    
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        protected void onPause() {
            mAgentWeb.getWebLifeCycle().onPause();
            super.onPause();
    
        }
    
        @Override
        protected void onResume() {
            mAgentWeb.getWebLifeCycle().onResume();
            super.onResume();
        }
    
        @Override
        protected void onDestroy() {
            mAgentWeb.getWebLifeCycle().onDestroy();
            super.onDestroy();
            mBinder.unbind();
        }
    }
    
    

    AgentWeb的使用可以查看作者的github--AgentWeb

    显示的容器已经准备完毕,接下来就是来给Banner和recycleView添加点击事件了。

    添加点击事件

    1.给Banner添加点击事件

    mMainBanner.setOnBannerListener(),详细的可以看Android图片轮播控件

    2.recycleView添加点击事件

    给recycleView添加点击事件的方法有很多,我这里使用接口的方式。在ArticleAdapter.java中定义

        private OnItemClickListener mListener;
    
        public void setListener(OnItemClickListener listener) {
            mListener = listener;
        }
        
        public interface OnItemClickListener {
            /**
             * <p>文章点击事件</p>
             * @param view view
             * @param position 点击位置
             */
            void onItemClick(View view, int position);
    
            /**
             * <p>收藏点击事件</p>
             * @param view 点击的view
             * @param position 点击的位置
             */
            void onCollectionClick(View view, int position);
        }
    

    onBindViewHolder方法中,给itemView和mArticleCollection添加点击事件。

                //item点击事件
                articleHolder.itemView.setOnClickListener(v -> {
                    if (mListener != null) {
                        mListener.onItemClick(articleHolder.itemView,articleHolder.getLayoutPosition());
                    }
    
                });
    
                //收藏的点击事件
                articleHolder.mArticleCollection.setOnClickListener(v ->{
                    if (mListener != null) {
                        mListener.onCollectionClick(articleHolder.mArticleCollection,articleHolder.getLayoutPosition());
                    }
                });
    

    具体的处理,就可以在MainActivity中进行实现了。

        @Override
        public void onItemClick(View view, int position) {
    
            if (mArticleDatas != null) {
                ArticleBean bean = mArticleDatas.get(position);
                Utils.startWebView(this, bean.title, bean.link);
            }
        }
    
        @Override
        public void onCollectionClick(View view, int position) {
            ToastUtils.setBgColor(getResources().getColor(R.color.colorPrimaryDark, null));
            ToastUtils.setMsgColor(getResources().getColor(R.color.white, null));
            ToastUtils.showShort(R.string.coming_soon);
        }
    

    跳转的工具类

    package com.tom.wanandroid.utils;
    
    import android.content.Context;
    import android.content.Intent;
    
    import com.tom.wanandroid.Constant;
    import com.tom.wanandroid.view.WebViewActivity;
    
    /**
     * <p>Title: Utils</p>
     * <p>Description: 工具集合</p>
     *
     * @author tom
     * @date 2019/3/26 14:40
     **/
    public class Utils {
    
    
        /**
         * <p>跳转到WebView</p>
         * @param context 上下文
         * @param title title
         * @param url url
         */
        public static void startWebView(Context context, String title, String url) {
    
            Intent intent = new Intent();
            intent.setClass(context, WebViewActivity.class);
            intent.putExtra(Constant.ARTICLE_TITLE, title);
            intent.putExtra(Constant.ARTICLE_URL, url);
            context.startActivity(intent);
    
        }
    
    
    }
    
    

    完成以上内容,就可以吃蛋糕了。

    4.WanAndroid实战——刷新加载

    相关文章

      网友评论

        本文标题:WanAndroid实战——内容显示

        本文链接:https://www.haomeiwen.com/subject/pnlzbqtx.html