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