轮播+跳转+xlistview


依赖:
package com.bw.arp.zhoukao2_moni.Xlistview;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewTreeObserver.OnGlobalLayoutListener;
import android.view.animation.DecelerateInterpolator;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.Scroller;
import android.widget.TextView;

import com.bw.arp.zhoukao2_moni.R;

import java.text.SimpleDateFormat;
import java.util.Date;
public class XListView extends ListView implements OnScrollListener {
	private float mLastY = -1; // save event y
	private Scroller mScroller; // 用于回滚
	private OnScrollListener mScrollListener; // 回滚监听
	// 触发刷新和加载更多接口.
	private IXListViewListener mListViewListener;
	// -- 头部的View
	private XListViewHeader mHeaderView;
	// 查看头部的内容,用它计算头部高度,和隐藏它
	// 当禁用的时候刷新
	private RelativeLayout mHeaderViewContent;
	private TextView mHeaderTimeView;
	private int mHeaderViewHeight; // 头部View的高
	private boolean mEnablePullRefresh = true;
	private boolean mPullRefreshing = false; // 是否刷新.
	// -- 底部的View
	private XListViewFooter mFooterView;
	private boolean mEnablePullLoad;
	private boolean mPullLoading;
	private boolean mIsFooterReady = false;
	// 总列表项,用于检测列表视图的底部
	private int mTotalItemCount;

	// for mScroller, 滚动页眉或者页脚
	private int mScrollBack;
	private final static int SCROLLBACK_HEADER = 0;// 顶部
	private final static int SCROLLBACK_FOOTER = 1;// 下部

	private final static int SCROLL_DURATION = 400; // 滚动回时间
	private final static int PULL_LOAD_MORE_DELTA = 50; // 当大于50PX的时候,加载更多

	private final static float OFFSET_RADIO = 1.8f; // support iOS like pull
	// feature.

	/**
	 * @param context
	 */
	public XListView(Context context) {
		super(context);
		initWithContext(context);
	}

	public XListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		initWithContext(context);
	}

	public XListView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		initWithContext(context);
	}

	private void initWithContext(Context context) {
		mScroller = new Scroller(context, new DecelerateInterpolator());
		// XListView need the scroll event, and it will dispatch the event to
		// user's listener (as a proxy).
		super.setOnScrollListener(this);

		// 初始化头部View
		mHeaderView = new XListViewHeader(context);
		mHeaderViewContent = (RelativeLayout) mHeaderView
				.findViewById(R.id.xlistview_header_content);
		mHeaderTimeView = (TextView) mHeaderView
				.findViewById(R.id.xlistview_header_time);
		addHeaderView(mHeaderView);// 把头部这个视图添加进去

		// 初始化底部的View
		mFooterView = new XListViewFooter(context);

		// 初始化头部高度
		mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
				new OnGlobalLayoutListener() {
					@Override
					public void onGlobalLayout() {
						mHeaderViewHeight = mHeaderViewContent.getHeight();
						getViewTreeObserver()
								.removeGlobalOnLayoutListener(this);
					}
				});
	}

	@Override
	public void setAdapter(ListAdapter adapter) {
		// 确定XListViewFooter是最后底部的View, 并且只有一次
		if (mIsFooterReady == false) {
			mIsFooterReady = true;
			addFooterView(mFooterView);
		}
		super.setAdapter(adapter);
	}

	/**
	 * 启用或禁用下拉刷新功能.
	 *
	 * @param enable
	 */
	public void setPullRefreshEnable(boolean enable) {
		mEnablePullRefresh = enable;
		if (!mEnablePullRefresh) { // 禁用,隐藏内容
			mHeaderViewContent.setVisibility(View.INVISIBLE);// 如果为false则隐藏下拉刷新功能
		} else {
			mHeaderViewContent.setVisibility(View.VISIBLE);// 否则就显示下拉刷新功能
		}
	}

	/**
	 * 启用或禁用加载更多的功能.
	 *
	 * @param enable
	 */
	public void setPullLoadEnable(boolean enable) {
		mEnablePullLoad = enable;
		if (!mEnablePullLoad) {
			mFooterView.hide();// 隐藏
			mFooterView.setOnClickListener(null);
		} else {
			mPullLoading = false;
			mFooterView.show();// 显示
			mFooterView.setState(XListViewFooter.STATE_NORMAL);
			// both "上拉" 和 "点击" 将调用加载更多.
			mFooterView.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					startLoadMore();
				}
			});
		}
	}

	/**
	 * 停止刷新, 重置头视图.
	 */
	public void stopRefresh() {
		if (mPullRefreshing == true) {
			mPullRefreshing = false;
			resetHeaderHeight();
		}
	}

	/**
	 * stop load more, reset footer view.
	 */
	public void stopLoadMore() {
		if (mPullLoading == true) {
			mPullLoading = false;
			mFooterView.setState(XListViewFooter.STATE_NORMAL);
		}
	}

	/**
	 * 設置最後一次刷新時間
	 *
	 * @param time
	 */
	@SuppressLint("SimpleDateFormat")
	public void setRefreshTime(String time) {
		SimpleDateFormat   formatter   =   new   SimpleDateFormat   ("yyyy年MM月dd日   HH:mm:ss     ");
		Date   curDate   =   new   Date(System.currentTimeMillis());
		//获取当前时间
		String   str   =   formatter.format(curDate);
		mHeaderTimeView.setText(str);
	}

	private void invokeOnScrolling() {
		if (mScrollListener instanceof OnXScrollListener) {
			OnXScrollListener l = (OnXScrollListener) mScrollListener;
			l.onXScrolling(this);
		}
	}

	private void updateHeaderHeight(float delta) {
		mHeaderView.setVisiableHeight((int) delta
				+ mHeaderView.getVisiableHeight());
		if (mEnablePullRefresh && !mPullRefreshing) { // 未处于刷新状态,更新箭头
			if (mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
				mHeaderView.setState(XListViewHeader.STATE_READY);
			} else {
				mHeaderView.setState(XListViewHeader.STATE_NORMAL);
			}
		}
		setSelection(0); // scroll to top each time
	}

	/**
	 * 重置头视图的高度
	 */
	private void resetHeaderHeight() {
		int height = mHeaderView.getVisiableHeight();
		if (height == 0) // 不显示.
			return;
		// 不显示刷新和标题的时候,什么都不显示
		if (mPullRefreshing && height <= mHeaderViewHeight) {
			return;
		}
		int finalHeight = 0; // 默认:滚动回头.
		// 当滚动回显示所有头标题时候,刷新
		if (mPullRefreshing && height > mHeaderViewHeight) {
			finalHeight = mHeaderViewHeight;
		}
		mScrollBack = SCROLLBACK_HEADER;
		mScroller.startScroll(0, height, 0, finalHeight - height,
				SCROLL_DURATION);
		// 触发刷新
		invalidate();
	}

	// 改变底部视图高度
	private void updateFooterHeight(float delta) {
		int height = mFooterView.getBottomMargin() + (int) delta;
		if (mEnablePullLoad && !mPullLoading) {
			if (height > PULL_LOAD_MORE_DELTA) { // 高度足以调用加载更多
				mFooterView.setState(XListViewFooter.STATE_READY);
			} else {
				mFooterView.setState(XListViewFooter.STATE_NORMAL);
			}
		}
		mFooterView.setBottomMargin(height);

		// setSelection(mTotalItemCount - 1); // scroll to bottom
	}

	private void resetFooterHeight() {
		int bottomMargin = mFooterView.getBottomMargin();
		if (bottomMargin > 0) {
			mScrollBack = SCROLLBACK_FOOTER;
			mScroller.startScroll(0, bottomMargin, 0, -bottomMargin,
					SCROLL_DURATION);
			invalidate();
		}
	}

	// 开始加载更多
	private void startLoadMore() {
		mPullLoading = true;
		mFooterView.setState(XListViewFooter.STATE_LOADING);
		if (mListViewListener != null) {
			mListViewListener.onLoadMore();
		}
	}

	// 触发事件
	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		if (mLastY == -1) {
			mLastY = ev.getRawY();
		}

		switch (ev.getAction()) {
			case MotionEvent.ACTION_DOWN:
				mLastY = ev.getRawY();
				break;
			case MotionEvent.ACTION_MOVE:
				final float deltaY = ev.getRawY() - mLastY;
				mLastY = ev.getRawY();
				System.out.println("数据监测:" + getFirstVisiblePosition() + "---->"
						+ getLastVisiblePosition());
				if (getFirstVisiblePosition() == 0
						&& (mHeaderView.getVisiableHeight() > 0 || deltaY > 0)) {
					// 第一项显示,标题显示或拉下来.
					updateHeaderHeight(deltaY / OFFSET_RADIO);
					invokeOnScrolling();
				} else if (getLastVisiblePosition() == mTotalItemCount - 1
						&& (mFooterView.getBottomMargin() > 0 || deltaY < 0)) {
					// 最后一页,已停止或者想拉起
					updateFooterHeight(-deltaY / OFFSET_RADIO);
				}
				break;
			default:
				mLastY = -1; // 重置
				if (getFirstVisiblePosition() == 0) {
					// 调用刷新,如果头部视图高度大于设定高度。
					if (mEnablePullRefresh
							&& mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
						mPullRefreshing = true;// 那么刷新
						mHeaderView.setState(XListViewHeader.STATE_REFRESHING);
						if (mListViewListener != null) {
							mListViewListener.onRefresh();
						}
					}
					resetHeaderHeight();// 刷新完毕,重置头部高度,也就是返回上不
				}
				if (getLastVisiblePosition() == mTotalItemCount - 1) {
					// 调用加载更多.
					if (mEnablePullLoad
							&& mFooterView.getBottomMargin() > PULL_LOAD_MORE_DELTA) {
						startLoadMore();// 如果底部视图高度大于可以加载高度,那么就开始加载
					}
					resetFooterHeight();// 重置加载更多视图高度
				}
				break;
		}
		return super.onTouchEvent(ev);
	}

	@Override
	public void computeScroll() {
		if (mScroller.computeScrollOffset()) {
			if (mScrollBack == SCROLLBACK_HEADER) {
				mHeaderView.setVisiableHeight(mScroller.getCurrY());
			} else {
				mFooterView.setBottomMargin(mScroller.getCurrY());
			}
			postInvalidate();
			invokeOnScrolling();
		}
		super.computeScroll();
	}

	@Override
	public void setOnScrollListener(OnScrollListener l) {
		mScrollListener = l;
	}

	@Override
	public void onScrollStateChanged(AbsListView view, int scrollState) {
		if (mScrollListener != null) {
			mScrollListener.onScrollStateChanged(view, scrollState);
		}
	}

	@Override
	public void onScroll(AbsListView view, int firstVisibleItem,
						 int visibleItemCount, int totalItemCount) {
		// 发送到用户的监听器
		mTotalItemCount = totalItemCount;
		if (mScrollListener != null) {
			mScrollListener.onScroll(view, firstVisibleItem, visibleItemCount,
					totalItemCount);
		}
	}

	public void setXListViewListener(IXListViewListener l) {
		mListViewListener = l;
	}

	/**
	 * 你可以监听到列表视图,OnScrollListener 或者这个. 他将会被调用 , 当头部或底部触发的时候
	 */
	public interface OnXScrollListener extends OnScrollListener {
		public void onXScrolling(View view);
	}

	/**
	 * 实现这个接口来刷新/负载更多的事件
	 */
	public interface IXListViewListener {
		public void onRefresh();

		public void onLoadMore();
	}
}




package com.bw.arp.zhoukao2_moni.Xlistview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bw.arp.zhoukao2_moni.R;

public class XListViewFooter extends LinearLayout {
	public final static int STATE_NORMAL = 0;
	public final static int STATE_READY = 1;
	public final static int STATE_LOADING = 2;

	private Context mContext;

	private View mContentView;
	private View mProgressBar;
	private TextView mHintView;

	public XListViewFooter(Context context) {
		super(context);
		initView(context);
	}

	public XListViewFooter(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView(context);
	}

	public void setState(int state) {
		mHintView.setVisibility(View.INVISIBLE);// 开始底部控件都隐藏
		mProgressBar.setVisibility(View.INVISIBLE);
		mHintView.setVisibility(View.INVISIBLE);
		if (state == STATE_READY) {// 如果是第一页状态,那么“查看更多”显示
			mHintView.setVisibility(View.VISIBLE);
			mHintView.setText(R.string.xlistview_footer_hint_ready);// 松开显示更多
		} else if (state == STATE_LOADING) {// 当加载的时候
			mProgressBar.setVisibility(View.VISIBLE);// 加载进度条显示
		} else {
			mHintView.setVisibility(View.VISIBLE);
			mHintView.setText(R.string.xlistview_footer_hint_normal);// 查看更多
		}
	}

	public void setBottomMargin(int height) {
		if (height < 0)
			return;
		LayoutParams lp = (LayoutParams) mContentView
				.getLayoutParams();
		lp.bottomMargin = height;
		mContentView.setLayoutParams(lp);
	}

	public int getBottomMargin() {
		LayoutParams lp = (LayoutParams) mContentView
				.getLayoutParams();
		return lp.bottomMargin;
	}

	/**
	 * normal status
	 */
	public void normal() {
		mHintView.setVisibility(View.VISIBLE);
		mProgressBar.setVisibility(View.GONE);
	}

	/**
	 * loading status
	 */
	public void loading() {
		mHintView.setVisibility(View.GONE);
		mProgressBar.setVisibility(View.VISIBLE);
	}

	/**
	 * 当禁用拉加载更多隐藏底部视图
	 */
	public void hide() {
		LayoutParams lp = (LayoutParams) mContentView
				.getLayoutParams();
		lp.height = 0;
		mContentView.setLayoutParams(lp);
	}

	/**
	 * 显示底部视图
	 */
	public void show() {
		LayoutParams lp = (LayoutParams) mContentView
				.getLayoutParams();
		lp.height = LayoutParams.WRAP_CONTENT;
		mContentView.setLayoutParams(lp);
	}

	private void initView(Context context) {
		mContext = context;
		LinearLayout moreView = (LinearLayout) LayoutInflater.from(mContext)
				.inflate(R.layout.xlistview_footer, null);
		addView(moreView);
		moreView.setLayoutParams(new LayoutParams(
				LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

		mContentView = moreView.findViewById(R.id.xlistview_footer_content);
		mProgressBar = moreView.findViewById(R.id.xlistview_footer_progressbar);
		mHintView = (TextView) moreView
				.findViewById(R.id.xlistview_footer_hint_textview);
	}

}





package com.bw.arp.zhoukao2_moni.Xlistview;
import android.content.Context;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.bw.arp.zhoukao2_moni.R;

public class XListViewHeader extends LinearLayout {
	private LinearLayout mContainer;
	private ImageView mArrowImageView;
	private ProgressBar mProgressBar;
	private TextView mHintTextView;
	private int mState = STATE_NORMAL;// 初始状态

	private Animation mRotateUpAnim;
	private Animation mRotateDownAnim;

	private final int ROTATE_ANIM_DURATION = 180;

	public final static int STATE_NORMAL = 0;
	public final static int STATE_READY = 1;
	public final static int STATE_REFRESHING = 2;

	public XListViewHeader(Context context) {
		super(context);
		initView(context);
	}

	/**
	 * @param context
	 * @param attrs
	 */
	public XListViewHeader(Context context, AttributeSet attrs) {
		super(context, attrs);
		initView(context);
	}

	private void initView(Context context) {
		// 初始情况,设置下拉刷新view高度为0
		LayoutParams lp = new LayoutParams(
				LayoutParams.FILL_PARENT, 0);
		// 时间TextView
		mContainer = (LinearLayout) LayoutInflater.from(context).inflate(
				R.layout.xlistview_header, null);
		addView(mContainer, lp);
		setGravity(Gravity.BOTTOM);
		// 找到头部页面里的控件
		mArrowImageView = (ImageView) findViewById(R.id.xlistview_header_arrow);
		mHintTextView = (TextView) findViewById(R.id.xlistview_header_hint_textview);
		mProgressBar = (ProgressBar) findViewById(R.id.xlistview_header_progressbar);

		mRotateUpAnim = new RotateAnimation(0.0f, -180.0f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		mRotateUpAnim.setDuration(ROTATE_ANIM_DURATION);
		mRotateUpAnim.setFillAfter(true);
		mRotateDownAnim = new RotateAnimation(-180.0f, 0.0f,
				Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
				0.5f);
		mRotateDownAnim.setDuration(ROTATE_ANIM_DURATION);
		mRotateDownAnim.setFillAfter(true);
	}

	// 设置状态
	public void setState(int state) {
		if (state == mState)
			return;

		if (state == STATE_REFRESHING) { // 显示进度
			mArrowImageView.clearAnimation();
			mArrowImageView.setVisibility(View.INVISIBLE);// 不显示图片
			mProgressBar.setVisibility(View.VISIBLE);// 显示进度条
		} else { // 显示箭头图片
			mArrowImageView.setVisibility(View.VISIBLE);
			mProgressBar.setVisibility(View.INVISIBLE);
		}

		switch (state) {
			case STATE_NORMAL:
				if (mState == STATE_READY) {// 当状态时准备的时候,显示动画
					mArrowImageView.startAnimation(mRotateDownAnim);
				}
				if (mState == STATE_REFRESHING) {// 当状态显示进度条的时候,清除动画
					mArrowImageView.clearAnimation();
				}
				mHintTextView.setText(R.string.xlistview_header_hint_normal);// 文字提示:下拉刷新
				break;
			case STATE_READY:
				if (mState != STATE_READY) {
					mArrowImageView.clearAnimation();
					mArrowImageView.startAnimation(mRotateUpAnim);
					mHintTextView.setText(R.string.xlistview_header_hint_ready);// 松开刷新数据
				}
				break;
			case STATE_REFRESHING:
				mHintTextView.setText(R.string.xlistview_header_hint_loading);
				break;
			default:
		}

		mState = state;
	}

	public void setVisiableHeight(int height) {
		if (height < 0)
			height = 0;
		LayoutParams lp = (LayoutParams) mContainer
				.getLayoutParams();
		lp.height = height;
		mContainer.setLayoutParams(lp);
	}

	public int getVisiableHeight() {
		return mContainer.getHeight();
	}

}




<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:id="@+id/xlistview_footer_content"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="10dp" >

        <ProgressBar
            android:id="@+id/xlistview_footer_progressbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:visibility="invisible" />

        <TextView
            android:id="@+id/xlistview_footer_hint_textview"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:text="@string/xlistview_footer_hint_normal" />
    </RelativeLayout>

</LinearLayout>


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="bottom" >

    <RelativeLayout
        android:id="@+id/xlistview_header_content"
        android:layout_width="fill_parent"
        android:layout_height="60dp" >

        <LinearLayout
            android:id="@+id/xlistview_header_text"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/xlistview_header_hint_textview"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/xlistview_header_hint_normal" />

            <LinearLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="3dp" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="@string/xlistview_header_last_time"
                    android:textSize="12sp" />

                <TextView
                    android:id="@+id/xlistview_header_time"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textSize="12sp" />
            </LinearLayout>
        </LinearLayout>

        <ImageView
            android:id="@+id/xlistview_header_arrow"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignLeft="@id/xlistview_header_text"
            android:layout_centerVertical="true"
            android:layout_marginLeft="-35dp"
            android:src="@mipmap/xlistview_arrow" />

        <ProgressBar
            android:id="@+id/xlistview_header_progressbar"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_alignLeft="@id/xlistview_header_text"
            android:layout_centerVertical="true"
            android:layout_marginLeft="-40dp"
            android:visibility="invisible" />
    </RelativeLayout>

</LinearLayout>


<resources>
    <string name="app_name">Zhoukao2_moni</string>
    <string name="xlistview_header_hint_normal">下拉刷新</string>
    <string name="xlistview_header_hint_ready">松开刷新数据</string>
    <string name="xlistview_header_hint_loading">正在加载...</string>
    <string name="xlistview_header_last_time">上次更新时间:</string>
    <string name="xlistview_footer_hint_normal">查看更多</string>
    <string name="xlistview_footer_hint_ready">松开载入更多</string>

    <string-array name="goodsType">
        <item>新闻</item>
        <item>关注</item>
        <item>动态</item>
        <item>设置</item>
    </string-array>
</resources>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>


<resources>
    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>
</resources>


<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>



<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
    android:layout_height="match_parent"
    tools:context="com.example.month_3.MainActivity">

   <android.support.v4.view.ViewPager
       android:id="@+id/viewpager"
       android:layout_width="match_parent"
       android:layout_height="200dp"/>

   <com.bawei.jane.mxlistview.view.XListView
       android:id="@+id/xlistview"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>


</LinearLayout>



<?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="com.example.month_3.Main2Activity">

    <WebView
        android:id="@+id/Web"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</android.support.constraint.ConstraintLayout>

<?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="com.example.month_3.Main3Activity">

</android.support.constraint.ConstraintLayout>



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/tu_list0"
        android:layout_width="100dp"
        android:layout_height="100dp" />

    <TextView
        android:id="@+id/name_list0"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_toEndOf="@+id/tu_list0"
        android:layout_toRightOf="@+id/tu_list0"
        android:padding="10dp"
        android:textSize="20sp"
        android:textColor="#f00"
        />
</RelativeLayout>




<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">


    <TextView
        android:id="@+id/name_list1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:padding="10dp"
        android:textSize="20sp"
        android:textColor="#f00"
        />
</RelativeLayout>

主界面:
package com.example.month_3;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.jane.mxlistview.view.XListView;
import com.example.month_3.MyBean.MyShuJu;
import com.example.month_3.MyBean.MypagerBean;
import com.example.month_3.Utils.ImageLoaderutils;
import com.example.month_3.Utils.MyNetTask;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private  List<MyShuJu.NewslistBean> data = new ArrayList<>();
    private List<String> list = new ArrayList<>();
    private XListView xlistview;
    private ViewPager viewPager;
    private String part= "http://api.tianapi.com/tiyu/?key=36bafe109f1b68cc2c3829db69c7c180&num=";
    private int index = 3;
    private String url=part+index;
    private int type=1;
    private DisplayImageOptions option;
    private Myadapter myadapter;
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 0){
                int currentItem = viewPager.getCurrentItem();
                viewPager.setCurrentItem(currentItem+1);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化图片
        ImageLoaderutils.initImageLoader(MainActivity.this);
        option = ImageLoaderutils.getImageOption(MainActivity.this);
        //找控件
        xlistview = findViewById(R.id.xlistview);
        viewPager = findViewById(R.id.viewpager);
        //viewpager
        Newviewpager();
        //xlistview
        NewXlistview();
        //xlistview获取参数与实例化适配器
        requestData();
    }
    //xlistview相关操作
    private void NewXlistview() {
        xlistview.setPullRefreshEnable(true);
        xlistview.setPullLoadEnable(true);
        xlistview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                index=3;
                url=part+index;
                type=1;
                requestData();
            }
            @Override
            public void onLoadMore() {
                index++;
                url=part+index;
                type=2;
                requestData();
            }
        });
        //XListView的长摁事件
        xlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("url",data.get(position-1).getUrl());
                startActivity(intent);
                return true;
            }
        });
    }
    //xlistview获取参数与实例化适配器
    private void requestData() {
            MyNetTask task = new MyNetTask(new MyNetTask.IcallBack() {
                @Override
                public void getJsonData(String jsonStr) {
                    Gson gson = new Gson();
                    MyShuJu myShuJu = gson.fromJson(jsonStr, MyShuJu.class);
                    if (type==1)
                    {
                        data.clear();
                    }
                    data.addAll(myShuJu.getNewslist());
                    if (myadapter==null)
                    {
                        myadapter = new Myadapter();
                        xlistview.setAdapter(myadapter);
                    }else {
                        myadapter.notifyDataSetChanged();
                    }
                    if (type==1)
                    {
                        xlistview.stopRefresh();
                    }else {
                        xlistview.stopLoadMore();
                    }
                }
            });
        task.execute(url);
        }
    //viewpager相关操作
    private void Newviewpager() {
        MyNetTask task = new MyNetTask(new MyNetTask.IcallBack() {
            @Override
            public void getJsonData(String jsonStr) {
                Gson gson = new Gson();
                MypagerBean myShuJu = gson.fromJson(jsonStr, MypagerBean.class);
                List<MypagerBean.NewslistBean> newslist = myShuJu.getNewslist();
                for (int i = 0 ;i<newslist.size();i++){
                    String picUrl = newslist.get(i).getPicUrl();
                    list.add(picUrl);
                }
                viewPager.setAdapter(new MyPagerAdapter());
                viewPager.setCurrentItem(list.size()*10000);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        });
        task.execute("https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page=1");
    }
    //ViewPager的适配器
    class MyPagerAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(MainActivity.this);
            ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView,option);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            container.addView(imageView);
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }
    }
    //xlistview的适配器
    class Myadapter extends BaseAdapter{

        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            if(position%2==0){
                return 0;
            }else{
                return 1;
            }
        }

        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            int itemViewType = getItemViewType(i);
            if(itemViewType == 0){
                ViewHolder0 holder0;
                if(view == null){
                    view = View.inflate(MainActivity.this,R.layout.listview0,null);
                    holder0= new ViewHolder0();
                    holder0.tu = view.findViewById(R.id.tu_list0);
                    holder0.name = view.findViewById(R.id.name_list0);
                    view.setTag(holder0);
                }else{
                    holder0 = (ViewHolder0) view.getTag();
                }
                    ImageLoader.getInstance().displayImage(data.get(i).getPicUrl(),holder0.tu,option);
                    holder0.name.setText(data.get(i).getTitle());
            }else{
                ViewHolder1 holder1;
                if(view == null){
                    view = View.inflate(MainActivity.this,R.layout.listview1,null);
                    holder1= new ViewHolder1();
                    holder1.name = view.findViewById(R.id.name_list1);
                    view.setTag(holder1);
                }else{
                    holder1 = (ViewHolder1) view.getTag();
                }
                holder1.name.setText(data.get(i).getTitle());
            }
            return view;
        }
        class ViewHolder0{
            ImageView tu;
            TextView name;
        }
        class ViewHolder1{
            TextView name;
        }
    }
}


跳转到的界面:
package com.example.month_3;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.example.month_3.R;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        WebView web = findViewById(R.id.Web);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");


        //设置WebView属性,能够执行Javascript脚本
        web.getSettings().setJavaScriptEnabled(true);
        //加载需要显示的网页
        web.loadUrl(url);
        web.setWebViewClient(new HelloWebViewClient ());

    }
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
}


package com.example.month_3;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.example.month_3.R;

public class Main2Activity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        WebView web = findViewById(R.id.Web);

        Intent intent = getIntent();
        String url = intent.getStringExtra("url");


        //设置WebView属性,能够执行Javascript脚本
        web.getSettings().setJavaScriptEnabled(true);
        //加载需要显示的网页
        web.loadUrl(url);
        web.setWebViewClient(new HelloWebViewClient ());

    }
    private class HelloWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
        }
    }
}



package com.example.month_3.MyBean;

import java.util.List;

/**
 * Created by ASUS on 2017/12/20.
 */

public class MypagerBean {

    /**
     * code : 200
     * msg : success
     * newslist : [{"ctime":"2017-12-20","title":"中国海空军这一系列动作相当提气!从绕台到日本海 接下来去哪?","description":"军评陈光文","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260876.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731607&signature=uzq1g9oxmrwF4jfPcQRSoC33k16T79gZjjANqeoK3u66O6qFUZ4BjrNwr3mmFyr9B2xdPXKZ2RVpECk7Uz2k9jT3xYqhlwoE2Nm*VEsZ6cw="},{"ctime":"2017-12-20","title":"中国海空军这一系列动作相当提气!从绕台到日本海 接下来去哪?","description":"军评陈光文","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260876.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731606&signature=uzq1g9oxmrwF4jfPcQRSoMmoWfNiO4l3ZTQbEwIXBYGwA*b4nuGrgf13wNG5bef6qos01mk1OHmodnC9idkt4AiCEl11mOXYzM2os0hRwoA="},{"ctime":"2017-12-20","title":"这大国又在俄盟友背后捅刀子,俄罗斯摸透其底牌打开天窗说亮话","description":"高峰军事观察","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260850.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731606&signature=ZEZGpFbgzMBkKz6uVMo19-QlYKvgCW1wI9KZxDt38NKNGWQWqZLPO4nlMPb*FKBt0Yo3lTDYsnWFql95xQNc1emBseD*Q7c5AIYKd0K*cK4="},{"ctime":"2017-12-20","title":"土耳其在叙利亚的军事布局完成,老美现在给了他翻脸开火的理由","description":"高峰军事观察","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260853.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731606&signature=AB0p6HEeJFJi0r10gcSqIGIGGb*hE8feHm3H5oCaBhWEpjZqzkV*kehyWRhPgOLh5MHivGO2GPb6FFA2pARY8KiNT6htY9*gVS080DrIvm8="},{"ctime":"2017-12-20","title":"土耳其在叙利亚的军事布局完成,老美现在给了他翻脸开火的理由","description":"高峰军事观察","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260853.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731605&signature=AB0p6HEeJFJi0r10gcSqIPxBTgl-Zrj9yq0ka6BoD3*iA-7pLd7jrHlkt9VveThcbO9621nN-lvWZuNitbACe7pq7GRgnsdBbJ-M9eqRohE="},{"ctime":"2017-12-20","title":"老虎伤人案庭审结束:原告索赔218余万,园方称无过错 | 晨读天下","description":"羊城晚报","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-36037989.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731605&signature=WlECCrDvwufq1onBJTAf82AshCLoKDHlL0gQVRbuqmaq185H5DKzj-i-kHkmNToJGDulRacZTaKDlrmbqHbB5FpdmfwhrzFwMroaccoTmI4="},{"ctime":"2017-12-20","title":"既生瑜何生亮?双雄相争 它竟然败下阵来!","description":"快车报","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-48455624.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513728008&signature=DHRIbU96hEZfTXpyWiSfe5RItGKdUveEva7CJZgMou76O2wEQADBl4S4oyHYhUoYrdtlWPSHzgBKDPOpslsCmBskr4hCzXQcZ7xJOeTHYN0="},{"ctime":"2017-12-20","title":"蓝标版有新发动机,红标版有新设计,哈弗H6 Coupe明年春天上市!","description":"快车报","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-48455624.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513728008&signature=nSDaGW8ZbelDOOvkmz0P83eXgtFVuDcLvTT2aRLOfysjiRhf4qAxlfOiStVeanq6mOKvFLsT5XZDfG31toXyDhwF4O*uNiLUfOVrz4ypZrI="},{"ctime":"2017-12-20","title":"权威发布|广西公布一批人事任免","description":"广西日报","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260670.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513720809&signature=g8rcqmyvxweBDGlpS39gccUYK0po0gtCYCGaNp3HNSYVb2bU6wSKZNX1uXH42ogvPfH7X5UckWQ8APLrGCWq1PkIUuIWtNnYMJJEY9TReNM="},{"ctime":"2017-12-19","title":"米老鼠吞下大狐狸,引发好莱坞大公司间的军备竞赛","description":"虹膜","picUrl":"https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260579.jpg/640","url":"https://mp.weixin.qq.com/s?src=16&ver=558×tamp=1513692009&signature=nxqUkwyApLrPzjG372PTMijuRfZoI74DAlfagnfbn1tZT9WBA2d0CKRReLD0JEC5dqWuDhotjJZoHowFD3MwVS5rjbCP4AnXFsSKHKN7RYI="}]
     */

    private int code;
    private String msg;
    private List<NewslistBean> newslist;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    

public static class NewslistBean {
        /**
         * ctime : 2017-12-20
         * title : 中国海空军这一系列动作相当提气!从绕台到日本海 接下来去哪?
         * description : 军评陈光文
         * picUrl : https://zxpic.gtimg.com/infonew/0/wechat_pics_-61260876.jpg/640
         * url : https://mp.weixin.qq.com/s?src=16&ver=559×tamp=1513731607&signature=uzq1g9oxmrwF4jfPcQRSoC33k16T79gZjjANqeoK3u66O6qFUZ4BjrNwr3mmFyr9B2xdPXKZ2RVpECk7Uz2k9jT3xYqhlwoE2Nm*VEsZ6cw=
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }
}



package com.example.month_3.Utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.os.Environment;
import com.example.month_3.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;

import java.io.File;


/*
 * Created by jane on 2017/12/12.
 */

public class ImageLoaderutils {

    //初使化
    public static void initImageLoader(Context context){
        //自定义磁盘缓存路径  系统默认的缓存路径 sd...<package>..cache  当app被卸载时,此路径下的缓存图片一并被删除
        //File cacheDir=getExternalCacheDir();
        File cacheDir= new File(Environment.getExternalStorageDirectory().getPath()+"/aaa");//自定义 sd卡的缓存路径

        //第一步:对ImageLoader进行初使化
        ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(context)
                .memoryCacheExtraOptions(320, 450) // default = device screen dimensions 内存缓存文件的最大长宽
                .diskCacheExtraOptions(480, 800, null)  // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个
                .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
                .tasksProcessingOrder(QueueProcessingType.FIFO) // default
                .denyCacheImageMultipleSizesInMemory()
                .memoryCache(new LruMemoryCache(10 * 1024 * 1024)) //可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
                .memoryCacheSizePercentage(13) // default

                .diskCache(new UnlimitedDiscCache(cacheDir)) // 磁盘缓存 --default 可以自定义缓存路径

                .diskCacheSize(20 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值

                .diskCacheFileCount(100)  // 可以缓存的文件数量
                // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
                .diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
                .imageDownloader(new BaseImageDownloader(context)) // default
                .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
                .writeDebugLogs() // 打印debug log
                .build();

        ImageLoader.getInstance().init(configuration);
    }

    /**
     * 得到图片的显示设置类对象
     * @param context
     * @return
     */
    public  static  DisplayImageOptions getImageOption(Context context){
        DisplayImageOptions options=new DisplayImageOptions.Builder()
                .cacheInMemory(true)//使用内存缓存
                .cacheOnDisk(true)//使用磁盘缓存

                .showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
                .showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
                .showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片

                .bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式
                .imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式===imageView,,ScaleType
                .displayer(new RoundedBitmapDisplayer(50))//设置图片圆角显示  弧度
                .build();

        return  options;
    }
}



package com.example.month_3.Utils;


import android.content.Context;
import android.widget.ImageView;

import com.nostra13.universalimageloader.core.ImageLoader;

/*
 * Created by WangWenDa on 2017/12/12.
 */

public class MyBannerLoader extends ImageLoader {


    public void displayImage(Context context, Object path, ImageView imageView) {
        com.nostra13.universalimageloader.core.ImageLoader.getInstance().
                displayImage(path.toString(),imageView,
                        ImageLoaderutils.getImageOption(context));


    }
}


package com.example.month_3.Utils;

import android.os.AsyncTask;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

/*
 * Created by jane on 2017/12/12.
 */

public class MyNetTask extends AsyncTask<String,Void,String> {

    //2.申明接口对象
    private IcallBack icallBack;

    //3.创建构造方法,将接口传进来
    public MyNetTask(IcallBack icallBack) {
        this.icallBack = icallBack;
    }

    @Override
    protected String doInBackground(String... strings) {
        StringBuilder builder=new StringBuilder();
        //1.根据url创建URL
        try {
            URL url=new URL(strings[0]);
            //2.打开连接
            HttpURLConnection conn =(HttpURLConnection) url.openConnection();
            //3.设置
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            //4.判断结果码
            int responseCode = conn.getResponseCode();
            if(conn.getResponseCode()==200){
                //5.获取数据
                InputStream inputStream = conn.getInputStream();
                BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
                String str;
                while ((str=reader.readLine())!=null){
                    builder.append(str);
                }
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return builder.toString();
    }

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        //4.调用接口中方法
        icallBack.getJsonData(s);
    }

    //1.定义一个接口
    public interface IcallBack{
        void getJsonData(String jsonStr);

    }
}



package com.example.month_3.Utils;

import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * Created by ASUS on 2017/12/12.
 */

public class Wangluo {


    public static boolean isConn(Context context){
        ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        NetworkInfo info   =(NetworkInfo) manager.getActiveNetworkInfo();
        if(info!=null && info.isAvailable()){
            return  true;
        }
        return false;
    }

    public  static void openDg(final Context context){
        AlertDialog.Builder builder=new AlertDialog.Builder(context);
        builder.setMessage("是否要进行网络连接设置?");
        builder.setPositiveButton("设置", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                Intent intent=null;
                //判断手机系统的版本  即API大于10 就是3.0或以上版本
                if(android.os.Build.VERSION.SDK_INT>10){
                    intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS);
                }else{
                    intent = new Intent();
                    ComponentName component = new ComponentName("com.android.settings","com.android.settings.WirelessSettings");
                    intent.setComponent(component);
                    intent.setAction("android.intent.action.VIEW");
                }
                context.startActivity(intent);
            }
        });

        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

            }
        });
        builder.create().show();

    }
}



package com.example.month_3;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.jane.mxlistview.view.XListView;
import com.example.month_3.MyBean.MyShuJu;
import com.example.month_3.MyBean.MypagerBean;
import com.example.month_3.Utils.ImageLoaderutils;
import com.example.month_3.Utils.MyNetTask;
import com.google.gson.Gson;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;
import java.util.List;

和上文中的主界面一样:(看)
public class MainActivity extends AppCompatActivity {
    private  List<MyShuJu.NewslistBean> data = new ArrayList<>();
    private List<String> list = new ArrayList<>();
    private XListView xlistview;
    private ViewPager viewPager;
    private String part= "http://api.tianapi.com/tiyu/?key=36bafe109f1b68cc2c3829db69c7c180&num=";
    private int index = 3;
    private String url=part+index;
    private int type=1;
    private DisplayImageOptions option;
    private Myadapter myadapter;
    @SuppressLint("HandlerLeak")
    private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 0){
                int currentItem = viewPager.getCurrentItem();
                viewPager.setCurrentItem(currentItem+1);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //初始化图片
        ImageLoaderutils.initImageLoader(MainActivity.this);
        option = ImageLoaderutils.getImageOption(MainActivity.this);
        //找控件
        xlistview = findViewById(R.id.xlistview);
        viewPager = findViewById(R.id.viewpager);
        //viewpager
        Newviewpager();
        //xlistview
        NewXlistview();
        //xlistview获取参数与实例化适配器
        requestData();
    }
    //xlistview相关操作
    private void NewXlistview() {
        xlistview.setPullRefreshEnable(true);
        xlistview.setPullLoadEnable(true);
        xlistview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                index=3;
                url=part+index;
                type=1;
                requestData();
            }
            @Override
            public void onLoadMore() {
                index++;
                url=part+index;
                type=2;
                requestData();
            }
        });
        //XListView的长摁事件
        xlistview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                intent.putExtra("url",data.get(position-1).getUrl());
                startActivity(intent);
                return true;
            }
        });
    }
    //xlistview获取参数与实例化适配器
    private void requestData() {
            MyNetTask task = new MyNetTask(new MyNetTask.IcallBack() {
                @Override
                public void getJsonData(String jsonStr) {
                    Gson gson = new Gson();
                    MyShuJu myShuJu = gson.fromJson(jsonStr, MyShuJu.class);
                    if (type==1)
                    {
                        data.clear();
                    }
                    data.addAll(myShuJu.getNewslist());
                    if (myadapter==null)
                    {
                        myadapter = new Myadapter();
                        xlistview.setAdapter(myadapter);
                    }else {
                        myadapter.notifyDataSetChanged();
                    }
                    if (type==1)
                    {
                        xlistview.stopRefresh();
                    }else {
                        xlistview.stopLoadMore();
                    }
                }
            });
        task.execute(url);
        }
    //viewpager相关操作
    private void Newviewpager() {
        MyNetTask task = new MyNetTask(new MyNetTask.IcallBack() {
            @Override
            public void getJsonData(String jsonStr) {
                Gson gson = new Gson();
                MypagerBean myShuJu = gson.fromJson(jsonStr, MypagerBean.class);
                List<MypagerBean.NewslistBean> newslist = myShuJu.getNewslist();
                for (int i = 0 ;i<newslist.size();i++){
                    String picUrl = newslist.get(i).getPicUrl();
                    list.add(picUrl);
                }
                viewPager.setAdapter(new MyPagerAdapter());
                viewPager.setCurrentItem(list.size()*10000);
                handler.sendEmptyMessageDelayed(0,2000);
            }
        });
        task.execute("https://api.tianapi.com/wxnew/?key=48a7d7193e11bd2dd4a683b6e2f90a4f&num=10&page=1");
    }
    //ViewPager的适配器
    class MyPagerAdapter extends PagerAdapter{

        @Override
        public int getCount() {
            return Integer.MAX_VALUE;
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == object;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            ImageView imageView = new ImageView(MainActivity.this);
            ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView,option);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            container.addView(imageView);
            return imageView;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            container.removeView((View)object);
        }
    }
    //xlistview的适配器
    class Myadapter extends BaseAdapter{

        @Override
        public int getViewTypeCount() {
            return 2;
        }

        @Override
        public int getItemViewType(int position) {
            if(position%2==0){
                return 0;
            }else{
                return 1;
            }
        }

        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public Object getItem(int i) {
            return null;
        }

        @Override
        public long getItemId(int i) {
            return 0;
        }

        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            int itemViewType = getItemViewType(i);
            if(itemViewType == 0){
                ViewHolder0 holder0;
                if(view == null){
                    view = View.inflate(MainActivity.this,R.layout.listview0,null);
                    holder0= new ViewHolder0();
                    holder0.tu = view.findViewById(R.id.tu_list0);
                    holder0.name = view.findViewById(R.id.name_list0);
                    view.setTag(holder0);
                }else{
                    holder0 = (ViewHolder0) view.getTag();
                }
                    ImageLoader.getInstance().displayImage(data.get(i).getPicUrl(),holder0.tu,option);
                    holder0.name.setText(data.get(i).getTitle());
            }else{
                ViewHolder1 holder1;
                if(view == null){
                    view = View.inflate(MainActivity.this,R.layout.listview1,null);
                    holder1= new ViewHolder1();
                    holder1.name = view.findViewById(R.id.name_list1);
                    view.setTag(holder1);
                }else{
                    holder1 = (ViewHolder1) view.getTag();
                }
                holder1.name.setText(data.get(i).getTitle());
            }
            return view;
        }
        class ViewHolder0{
            ImageView tu;
            TextView name;
        }
        class ViewHolder1{
            TextView name;
        }
    }
}








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值