2遍周考2模拟

一、布局:

1.1、activity_main.xml布局

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawerLayout"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <android.support.design.widget.TabLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:id="@+id/tabLayout"
            app:tabGravity="fill"></android.support.design.widget.TabLayout>
        <android.support.v4.view.ViewPager
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="9"
            android:id="@+id/viewPager"></android.support.v4.view.ViewPager>
    </LinearLayout>
    <LinearLayout
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:layout_gravity="left"
        android:background="#ccc"
        >
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="个人主页"
            android:textSize="25sp"
            android:layout_marginTop="30dp"
            android:padding="10dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="姓名:大壮"
            android:textSize="25sp"
            android:layout_marginTop="30dp"
            android:padding="10dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="年龄:26"
            android:textSize="25sp"
            android:layout_marginTop="30dp"
            android:padding="10dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="公司:百度"
            android:textSize="25sp"
            android:layout_marginTop="30dp"
            android:padding="10dp"/>
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="职位:软件工程师"
            android:textSize="25sp"
            android:layout_marginTop="30dp"
            android:padding="10dp"/>
        <Button
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="退出"
            android:id="@+id/btn_close"
            android:layout_marginTop="30dp"
            />
    </LinearLayout>



</android.support.v4.widget.DrawerLayout>

1.2、list优化listview1:

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

    <TextView
        android:id="@+id/text01"
        android:padding="10dp"
        android:textSize="25sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="哈哈" />

    <TextView
        android:id="@+id/text02"
        android:padding="10dp"
        android:textSize="25sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="哈哈" />
</LinearLayout>

1.3、listview2布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:orientation="horizontal"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_width="200dp"
            android:layout_height="200dp"
            android:id="@+id/images"
            android:src="@mipmap/ic_launcher"
            android:padding="10dp"/>
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="哈哈"
            android:textSize="20sp"
            android:padding="10dp"
            android:id="@+id/text001"/>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="哈哈"
            android:textSize="20sp"
            android:padding="10dp"
            android:id="@+id/text002"/>
    </LinearLayout>

</LinearLayout>

1.4、listview3布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <ImageView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:id="@+id/images01"
        android:src="@mipmap/ic_launcher"
        android:padding="10dp"/>

</LinearLayout>

1.5、fragment布局:1.5.1、my_fragment 布局

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

</LinearLayout>

1.5.2、news_fragment布局

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

</LinearLayout>

1.5.3、shouye_ fragment布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    android:background="#f00"
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <com.qy.xlistview.XListView
        android:id="@+id/xlistView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></com.qy.xlistview.XListView>

</LinearLayout>

 二、主方法:

2.1、MAinActivity代码:

package com.baway.qizhuangzhuang20170926;

import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;

import com.baway.qizhuangzhuang20170926.adapter.MyFragmentAdapter;
import com.baway.qizhuangzhuang20170926.fragment.MyFragment;
import com.baway.qizhuangzhuang20170926.fragment.NewsFragment;
import com.baway.qizhuangzhuang20170926.fragment.ShouYeFragment;

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

public class MainActivity extends FragmentActivity {
    private DrawerLayout drawerLayout;
    private Button btn_close;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private List<Fragment> list;
    private String[] titles={"首页","新闻","我的"};


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn_close = findViewById(R.id.btn_close);
        drawerLayout = findViewById(R.id.drawerLayout);
        tabLayout = findViewById(R.id.tabLayout);
        viewPager = findViewById(R.id.viewPager);
        btn_close.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                drawerLayout.closeDrawer(Gravity.LEFT);
            }
        });
        list = new ArrayList<Fragment>();
        list.add(new ShouYeFragment());
        list.add(new NewsFragment());
        list.add(new MyFragment());
        //创建适配器
        MyFragmentAdapter adapter = new MyFragmentAdapter(getSupportFragmentManager(), list, titles);
        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);

    }
}

2.2、MainActivity的适配器:

package com.baway.qizhuangzhuang20170926.adapter;

import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.List;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:58:00
 * @Description:
 */
public class MyFragmentAdapter extends FragmentPagerAdapter {
    private List<Fragment> list;
    private String[] titles;

    public MyFragmentAdapter(FragmentManager fm, List<Fragment> list, String[] titles) {
        super(fm);
        this.list = list;
        this.titles = titles;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        return titles[position];
    }

    @Override
    public Fragment getItem(int i) {
        return list.get(i);
    }

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

2.3、数据库代码:

package com.baway.qizhuangzhuang20170926.helper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:59:09
 * @Description:
 */
public class MyHelper extends SQLiteOpenHelper{
    public MyHelper(Context contextable){
        super(contextable,"bw.db",null,1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table news(url varchar(100),json varchar(500))");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

2.4、数据库dao层代码:

package com.baway.qizhuangzhuang20170926.dao;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.baway.qizhuangzhuang20170926.helper.MyHelper;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:58:34
 * @Description:
 */
public class SqlDao {
    private MyHelper myHelper;
    private String table="news";
    public SqlDao(Context context){
        myHelper = new MyHelper(context);
    }
    //添加数据库
    public void insertData(String dataUrl, String jsonStr){
        SQLiteDatabase database = myHelper.getWritableDatabase();
        //先删除数据
        database.delete(table,"url=?",new String[]{dataUrl});
        ContentValues values =new ContentValues();
        values.put("url",dataUrl);
        values.put("json",jsonStr);
        database.insert(table,null,values);
    }
    //查询数据库
    public String selectData(String dataUrl){
        String json="";
        SQLiteDatabase database = myHelper.getWritableDatabase();
        Cursor cursor = database.query(table,null,"url=?",new String[]{dataUrl},null,null,null);
        while (cursor.moveToNext()){
            json = cursor.getString(cursor.getColumnIndex("json"));
        }
        return json;
    }
}

2.5、 util网络请求:

2.5.1、HttpUtil代码:

package com.baway.qizhuangzhuang20170926.util;

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

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:32:17
 * @Description:
 */
public class HttpUtil {
    public static String getNetData(String dataUrl){
        try{
            URL url =new URL(dataUrl);
            HttpURLConnection connection =(HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            int code = connection.getResponseCode();
            if (code==200){
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                StringBuilder builder = new StringBuilder();
                String str="";
                while ((str=reader.readLine())!=null){
                    builder.append(str);
                }
                return builder.toString();
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return "";
    }
}

2.5.2、NetUtil代码:

package com.baway.qizhuangzhuang20170926.util;

import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:32:48
 * @Description:
 */
public class NetUtil {
    public boolean isNetConnected(Context context){
        try{
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo info = manager.getActiveNetworkInfo();
            if (info !=null){
                return info.isAvailable();

            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }
}

2.6、bean类news和newsbean;

2.6.1、news类代码:

package com.baway.qizhuangzhuang20170926.bean;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:56:43
 * @Description:
 */
public class News {
    private String news_title;
    private String news_summary;
    private String pic_url;

    public News(String news_title, String news_summary, String pic_url) {
        this.news_title = news_title;
        this.news_summary = news_summary;
        this.pic_url = pic_url;
    }

    public String getNews_title() {
        return news_title;
    }

    public void setNews_title(String news_title) {
        this.news_title = news_title;
    }

    public String getNews_summary() {
        return news_summary;
    }

    public void setNews_summary(String news_summary) {
        this.news_summary = news_summary;
    }

    public String getPic_url() {
        return pic_url;
    }

    public void setPic_url(String pic_url) {
        this.pic_url = pic_url;
    }

    @Override
    public String toString() {
        return "News{" +
                "news_title='" + news_title + '\'' +
                ", news_summary='" + news_summary + '\'' +
                ", pic_url='" + pic_url + '\'' +
                '}';
    }
}

2.6.2、newsbean代码:

package com.baway.qizhuangzhuang20170926.bean;

import java.util.List;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:56:56
 * @Description:
 */
public class NewsBean {
    private List<News> data;

    public NewsBean(List<News> data) {
        this.data = data;
    }

    public List<News> getData() {
        return data;
    }

    public void setData(List<News> data) {
        this.data = data;
    }

    @Override
    public String toString() {
        return "NewsBean{" +
                "data=" + data +
                '}';
    }
}

2.7、fragment首页解析数据代码:

package com.baway.qizhuangzhuang20170926.fragment;

import android.media.DrmInitData;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.baway.qizhuangzhuang20170926.R;
import com.baway.qizhuangzhuang20170926.adapter.MyBaseAdapter;
import com.baway.qizhuangzhuang20170926.bean.News;
import com.baway.qizhuangzhuang20170926.bean.NewsBean;
import com.baway.qizhuangzhuang20170926.dao.SqlDao;
import com.baway.qizhuangzhuang20170926.util.HttpUtil;
import com.baway.qizhuangzhuang20170926.util.NetUtil;
import com.google.gson.Gson;
import com.qy.xlistview.XListView;

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

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:56:16
 * @Description:
 */
public class ShouYeFragment extends Fragment {
    private String dataUrl="http://api.expoon.com/AppNews/getNewsList/type/1/p/";
    private XListView xListView;
    private List<News> list=new ArrayList<News>();
    private int page=1;
    private MyBaseAdapter adapter;
    private boolean netConnected;
    private SqlDao dao;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.shouye_fragment,container,false);
        xListView = view.findViewById(R.id.xlistView);

        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        dao = new SqlDao(getActivity());
        NetUtil util = new NetUtil();
         netConnected = util.isNetConnected(getActivity());
        adapter = new MyBaseAdapter(list, getActivity());
        xListView.setAdapter(adapter);
        initData(page);
        xListView.setPullLoadEnable(true);
        xListView.setPullRefreshEnable(true);
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                initData(page);
            }

            @Override
            public void onLoadMore() {
                page++;
                initData(page);

            }
        });
    }
    private void initData(int page){
        if (netConnected){
            new MyAsnycTask().execute(dataUrl+page);
        }else {
            Toast.makeText(getActivity(), "无网", Toast.LENGTH_SHORT).show();
            String selectData = dao.selectData(dataUrl + page);
            jsonParse(selectData);
        }
    }
    private void jsonParse(String s){
        Gson gson = new Gson();
        NewsBean newsBean = gson.fromJson(s, NewsBean.class);
        List<News> data = newsBean.getData();
        list.addAll(data);
        adapter.notifyDataSetChanged();
    }
    //创建内部类
    public class MyAsnycTask extends AsyncTask<String,Void,String>{
        @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            Log.i("aaa",""+s);
            dao.insertData(dataUrl+page,s);
            jsonParse(s);
            stopLoad();
        }

        @Override
        protected String doInBackground(String... strings) {
            String data  =HttpUtil.getNetData(strings[0]);
            return data;
        }

    }
    private void stopLoad(){
        xListView.setRefreshTime("刚刚刷新");
        xListView.stopLoadMore();
        xListView.stopRefresh();
    }
}

 2.8、MyBaseAdapter适配器代码:

package com.baway.qizhuangzhuang20170926.adapter;

import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.baway.qizhuangzhuang20170926.R;
import com.baway.qizhuangzhuang20170926.bean.News;
import com.bumptech.glide.Glide;

import java.util.List;

/**
 * @Auther: lenovo
 * @Date: 2019/2/25 10:57:37
 * @Description:
 */
public class MyBaseAdapter extends BaseAdapter {
    private List<News> list;
    private Context context;

    public MyBaseAdapter(List<News> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public int getItemViewType(int position) {
        return position%3;
    }

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

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        switch (getItemViewType(position)){
            case 0:
                ViewHolder1 holder1;
                if (convertView==null){
                    convertView=View.inflate(context, R.layout.listview1,null);
                    holder1 = new ViewHolder1();
                    holder1.textView1 = convertView.findViewById(R.id.text01);
                    holder1.textView2 = convertView.findViewById(R.id.text02);
                    convertView.setTag(holder1);
                }else {
                    holder1=(ViewHolder1)convertView.getTag();

                }
                holder1.textView1.setText(list.get(position).getNews_title());
                holder1.textView2.setText(list.get(position).getNews_summary());
                break;
            case 1:
                ViewHolder2 holder2;
                if (convertView==null){
                    convertView = View.inflate(context,R.layout.listview2,null);
                    holder2 = new ViewHolder2();
                    holder2.textView3=convertView.findViewById(R.id.text001);
                    holder2.textView4=convertView.findViewById(R.id.text002);
                    holder2.imageView=convertView.findViewById(R.id.images);
                    convertView.setTag(holder2);
                }else {
                    holder2=(ViewHolder2)convertView.getTag();
                }
                holder2.textView3.setText(list.get(position).getNews_title());
                holder2.textView4.setText(list.get(position).getNews_summary());
                Glide.with(context).load(list.get(position).getPic_url()).into(holder2.imageView);
                break;
            case 2:
                ViewHolder3 holder3;
                if (convertView==null){
                    convertView=View.inflate(context,R.layout.listview3,null);
                    holder3=new ViewHolder3();
                    holder3.imageView1=convertView.findViewById(R.id.images01);
                    convertView.setTag(holder3);

                }else {
                    holder3=(ViewHolder3)convertView.getTag();
                }
                Glide.with(context).load(list.get(position).getPic_url()).into(holder3.imageView1);
                break;
        }
        return convertView;
    }
    class ViewHolder1{
        private TextView textView1,textView2;
    }
    class ViewHolder2{
        private ImageView  imageView;
        private TextView textView3,textView4;
    }
    class ViewHolder3{
        private ImageView imageView1;
    }
}

2.9、最后一定的记住写:网络权限:

<uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

2.10、写依赖:

xlistview依赖;design包;glide包;gson包.

 implementation project(':xlistview_library')
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.github.bumptech.glide:glide:4.9.0'
    implementation 'com.google.code.gson:gson:2.8.5'

猜你喜欢

转载自blog.csdn.net/qq_42436644/article/details/87916492