//主页面
public class MainActivity extends AppCompatActivity implements XListView.IXListViewListener, ViewPager.OnPageChangeListener {
@Bind(R.id.tv_night)
TextView tvNight;
@Bind(R.id.xlv)
XListView xlv;
private String URL = "http://qhb.2dyt.com/Bwei/news?postkey=9rff1d1AK&type=5";
private List<String> bannerList = new ArrayList<>();
private List<DataBean.ListBean> listBeanList = new ArrayList<>();
private MyListAdapter adapter;
private ViewPager vpBanner;
private boolean flag = true;
private MyDao dao;
private SharedPreferences sp;
private LinearLayout dot;
private Handler handler = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
getSupportActionBar().hide();
//添加头部轮播图
initView();
sp = getSharedPreferences("config", MODE_PRIVATE);
//加载当前日夜间模式
loadMode();
//初始化数据库
dao = new MyDao(this);
//网络判断有网请求数据,没网加载数据库数据
if (NetUtils.getNetWorkInfo(this)) {
initData();
} else {
Toast.makeText(this, "没有网络", Toast.LENGTH_SHORT).show();
List<String> query = dao.query();
parase(query.get(query.size() - 1));
}
}
/**
* 加载当前日夜间模式
*/
private void loadMode() {
if (sp.getBoolean("night", false)) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
}
/**
* 网络请求数据
*/
private void initData() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().get().url(URL).build();
Response execute = client.newCall(request).execute();
if (execute.isSuccessful()) {
String string = execute.body().string();
dao.add("json", string);
parase(string);
}
execute.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
/**
* 解析Json字符串
*
* @param string json字符串
*/
private void parase(String string) {
DataBean dataBean = new Gson().fromJson(string, DataBean.class);
List<String> listViewPager = dataBean.getListViewPager();
List<DataBean.ListBean> list = dataBean.getList();
bannerList.clear();
for (String s : listViewPager) {
bannerList.add(s);
}
if (flag) {
listBeanList.clear();
}
for (DataBean.ListBean listBean : list) {
listBeanList.add(listBean);
}
//更新UI
runOnUiThread(new Runnable() {
@Override
public void run() {
if (adapter == null) {
//添加小圆点
initDot();
//设置适配器
vpBanner.setAdapter(new BannerAdapter(bannerList, MainActivity.this));
vpBanner.setCurrentItem(1000 * bannerList.size());
//设置ViewPager自动轮播
handler.postDelayed(task, 2000);
//添加ViewPager监听事件
vpBanner.addOnPageChangeListener(MainActivity.this);
//设置XListView的适配器
adapter = new MyListAdapter(listBeanList, MainActivity.this);
xlv.setAdapter(adapter);
//设置XListView支持下拉刷新上拉加载
xlv.setPullRefreshEnable(true);
xlv.setPullLoadEnable(true);
//设置XListView的监听事件
xlv.setXListViewListener(MainActivity.this);
} else {
adapter.notifyDataSetChanged();
}
xlv.stopRefresh();
xlv.stopLoadMore();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
//activity销毁时销毁handler线程
handler.removeCallbacks(task);
}
/**
* 设置ViewPager自动轮播任务
*/
Runnable task = new Runnable() {
@Override
public void run() {
int currentItem = vpBanner.getCurrentItem();
currentItem = currentItem + 1;
vpBanner.setCurrentItem(currentItem, false);
handler.postDelayed(this, 2000);
}
};
/**
* 添加ViewPager小圆点
*/
private void initDot() {
for (int i = 0; i < bannerList.size(); i++) {
ImageView iv = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10);
params.setMargins(3, 0, 3, 0);
iv.setLayoutParams(params);
if (i == 0) {
iv.setImageResource(R.drawable.dot_select);
} else {
iv.setImageResource(R.drawable.dot_normal);
}
dot.addView(iv);
}
}
/**
* 添加头部轮播图
*/
private void initView() {
View view = View.inflate(this, R.layout.header_view, null);
vpBanner = (ViewPager) view.findViewById(R.id.vp_banner);
dot = (LinearLayout) view.findViewById(R.id.layout_dot);
xlv.addHeaderView(view);
}
/**
* 日夜间切换
*/
@OnClick(R.id.tv_night)
public void onViewClicked() {
if (sp.getBoolean("night", true)) {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);
sp.edit().putBoolean("night", false).commit();
} else {
getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);
sp.edit().putBoolean("night", true).commit();
}
}
/**
* 下拉刷新
*/
@Override
public void onRefresh() {
flag = true;
initData();
}
/**
* 上拉加载
*/
@Override
public void onLoadMore() {
flag = false;
initData();
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
int i1 = position % bannerList.size();
for (int i = 0; i < dot.getChildCount(); i++) {
ImageView childAt = (ImageView) dot.getChildAt(i);
if (i1 == i) {
childAt.setImageResource(R.drawable.dot_select);
} else {
childAt.setImageResource(R.drawable.dot_normal);
}
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
//BannerAdapter类
public class BannerAdapter extends PagerAdapter {
private List<String> list;
private Context context;
public BannerAdapter(List<String> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View view = View.inflate(context, R.layout.banner_view, null);
ImageView ivBanner = (ImageView) view.findViewById(R.id.iv_banner);
ImageLoader.getInstance().displayImage(list.get(position%list.size()), ivBanner);
container.addView(view);
return view;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == object;
}
}
//MyListAdapter类
public class MyListAdapter extends BaseAdapter {
private List<DataBean.ListBean> list;
private Context context;
private static final int TYPEONE = 0;
private static final int TYPETWO = 1;
public MyListAdapter(List<DataBean.ListBean> list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int i) {
return list.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public int getItemViewType(int position) {
switch (list.get(position).getType()) {
case 2:
return TYPEONE;
case 4:
return TYPETWO;
default:
return TYPEONE;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder1 holder1 = null;
ViewHolder2 holder2 = null;
DataBean.ListBean listBean = list.get(i);
String pic = listBean.getPic();
String[] split = pic.split("\\|");
switch (getItemViewType(i)){
case TYPEONE:
if (view == null){
view = View.inflate(context, R.layout.list_item2,null);
holder1 = new ViewHolder1(view);
view.setTag(holder1);
}else {
holder1 = (ViewHolder1) view.getTag();
}
holder1.tv2Title.setText(listBean.getTitle());
ImageLoader.getInstance().displayImage(split[0], holder1.iv2Img1);
ImageLoader.getInstance().displayImage(split[1], holder1.iv2Img2);
break;
case TYPETWO:
if (view == null){
view = View.inflate(context, R.layout.list_item,null);
holder2 = new ViewHolder2(view);
view.setTag(holder2);
}else {
holder2 = (ViewHolder2) view.getTag();
}
holder2.tvTitle.setText(listBean.getTitle());
ImageLoader.getInstance().displayImage(split[0], holder2.ivImg1);
ImageLoader.getInstance().displayImage(split[1], holder2.ivImg2);
ImageLoader.getInstance().displayImage(split[2], holder2.ivImg3);
ImageLoader.getInstance().displayImage(split[3], holder2.ivImg4);
break;
}
return view;
}
static class ViewHolder2 {
@Bind(R.id.tv_title)
TextView tvTitle;
@Bind(R.id.iv_img1)
ImageView ivImg1;
@Bind(R.id.iv_img2)
ImageView ivImg2;
@Bind(R.id.iv_img3)
ImageView ivImg3;
@Bind(R.id.iv_img4)
ImageView ivImg4;
ViewHolder2(View view) {
ButterKnife.bind(this, view);
}
}
static class ViewHolder1 {
@Bind(R.id.tv2_title)
TextView tv2Title;
@Bind(R.id.iv2_img1)
ImageView iv2Img1;
@Bind(R.id.iv2_img2)
ImageView iv2Img2;
ViewHolder1(View view) {
ButterKnife.bind(this, view);
}
}
}
MyApp类
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化配置ImageLoader
initImageLoader();
}
/**
* 初始化配置ImageLoader
*/
private void initImageLoader() {
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisk(true)
.cacheInMemory(true)
.showImageForEmptyUri(R.mipmap.ic_launcher_round)
.showImageOnLoading(R.mipmap.ic_launcher)
.showImageOnFail(R.mipmap.ic_launcher_round)
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(config);
}
}
MyHelper类
public class MyHelper extends SQLiteOpenHelper {
public MyHelper(Context context) {
super(context, "data.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("create table json(json text, content text)");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
MyDao类
public class MyDao {
private final MyHelper helper;
public MyDao(Context context) {
helper = new MyHelper(context);
}
public void add (String name, String json){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("json", name);
values.put("content", json);
db.insert("json", null, values);
db.close();
}
public List<String> query () {
List<String> list = new ArrayList<>();
SQLiteDatabase db = helper.getWritableDatabase();
Cursor cursor = db.query("json", null, null, null, null, null, null);
while (cursor.moveToNext()){
String content = cursor.getString(cursor.getColumnIndex("content"));
list.add(content);
}
return list;
}
}
NetUtils类
public class NetUtils {
/**
* 联网判断
* @param context
* @return
*/
public static boolean getNetWorkInfo(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (manager != null){
NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
if (activeNetworkInfo != null && activeNetworkInfo.isConnected()){
return true;
}else {
return false;
}
}
return false;
}
}
设置小圆点
dot_normal
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#CCCCCC"/>
<size android:height="10dp" android:width="10dp"/>
</shape>
dot_select
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#FF0000"/>
<size android:height="10dp" android:width="10dp"/>
</shape>
//白天的颜色
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="titleBg">#FF0000</color>
<color name="textColor">#333333</color>
<color name="background">#FFFFFF</color>
<color name="titleTextColor">#FFFFFF</color>
</resources>
晚上
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="titleBg">#640000</color>
<color name="textColor">#FFFFFF</color>
<color name="background">#666666</color>
<color name="titleTextColor">#CCCCCC</color>
</resources>
主页面布局
<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:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.bwie.suzhaoliang.MainActivity">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/titleBg">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:padding="10dp"
android:text="北京"
android:textColor="@color/titleTextColor" />
<TextView
android:id="@+id/tv_night"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:text="地图"
android:textColor="@color/titleTextColor" />
</RelativeLayout>
<com.me.xlistview.view.XListView
android:id="@+id/xlv"
android:background="@color/background"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.me.xlistview.view.XListView>
</LinearLayout>
banner_view的布局
<ImageView
android:id="@+id/iv_banner"
android:layout_width="match_parent"
android:layout_height="match_parent" />
header_view布局
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="150dp">
<android.support.v4.view.ViewPager
android:id="@+id/vp_banner"
android:layout_centerInParent="true"
android:layout_width="match_parent"
android:layout_height="150dp"></android.support.v4.view.ViewPager>
<LinearLayout
android:id="@+id/layout_dot"
android:layout_width="match_parent"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_marginBottom="10dp"
android:orientation="horizontal"
android:layout_height="wrap_content"></LinearLayout>
</RelativeLayout>
list_item布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv_title"
android:textColor="@color/textColor"
android:layout_width="match_parent"
android:text="TextView"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="100dp">
<ImageView
android:id="@+id/iv_img1"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_img2"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_img3"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent" />
<ImageView
android:id="@+id/iv_img4"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
list_item2
<TextView
android:id="@+id/tv2_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textColor="@color/textColor" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv2_img1"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/iv2_img2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>