Demo

来源:互联网 发布:Campbell biology 淘宝 编辑:程序博客网 时间:2024/06/04 00:21

//主页面

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>



原创粉丝点击