项目实战模拟周考2:

第一步、先在res文件下drawable里边写sele_r.xml,代码如下:

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

    <item android:state_checked="true"><color android:color="@color/colorPrimary"/></item>
    <item android:state_checked="false"><color android:color="@color/colorAccent"/></item>
</selector>。

在values里边写colors.xml,代码如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#008577</color>
    <color name="colorPrimaryDark">#00574B</color>
    <color name="colorAccent">#D81B60</color>
</resources>。

在layout里边写布局:

1.activity_main.xml:

<?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:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />

    <RadioGroup
        android:id="@+id/radiogroup"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/radiobutton1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/sele_r"
            android:button="@null"
            android:checked="true"
            android:gravity="center"
            android:padding="6dp"
            android:text="ListView" />

        <RadioButton
            android:id="@+id/radiobutton2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@drawable/sele_r"
            android:button="@null"
            android:gravity="center"
            android:padding="6dp"
            android:text="GridView" />


    </RadioGroup>

</LinearLayout>

2.frag_grid.xml:

<?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">

    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="2" />
</RelativeLayout>

3.frag_list.xml:

<?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">

    <com.qy.xlistview.XListView
        android:id="@+id/xlistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

4.item_one.xml:

<?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"
    android:padding="16dp">

    <ImageView
        android:id="@+id/img1"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:src="@mipmap/ic_launcher_round" />

    <TextView
        android:id="@+id/name1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/img1"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="146dp"
        android:text="你说江南" />
</RelativeLayout>

5.item_two.xml:

<?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"
    android:padding="16dp">

    <ImageView
        android:id="@+id/img2"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        />

    <TextView
        android:id="@+id/name2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="US爱笑此生此大V你覅UNVR牛" />


</RelativeLayout>

第二步:在MainActivity里边写,代码如下:

package com.bawei.rui;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioGroup;

import com.bawei.rui.adapter.MyFragmentAdapter;
import com.bawei.rui.frag.FragGrid;
import com.bawei.rui.frag.FragList;

import java.util.ArrayList;

public class MainActivity extends FragmentActivity {

    private RadioGroup radioGroup;
    private ViewPager pager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        pager = findViewById(R.id.pager);
        radioGroup = findViewById(R.id.radiogroup);
        radioGroup.check(radioGroup.getChildAt(0).getId());
        ArrayList<Fragment> list = new ArrayList<>();
        list.add(new FragList());
        list.add(new FragGrid());
        pager.setAdapter(new MyFragmentAdapter(getSupportFragmentManager(), list));
        pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int i, float v, int i1) {

            }

            @Override
            public void onPageSelected(int i) {
                radioGroup.check(radioGroup.getChildAt(i).getId());
            }

            @Override
            public void onPageScrollStateChanged(int i) {

            }
        });
        radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                switch (checkedId) {
                    case R.id.radiobutton1:
                        pager.setCurrentItem(0);
                        break;
                    case R.id.radiobutton2:
                        pager.setCurrentItem(1);
                        break;
                }
            }
        });
    }
}

 第三步:分别建adapter/app/bean/frag/http这几个包下的类:

1.App类,代码如下:

package com.bawei.rui.app;

import android.app.Application;

import com.bawei.rui.R;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;


public class App extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        //设置框架的属性
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.mipmap.zhan)
                .displayer(new CircleBitmapDisplayer())
                .build();
        //图像加载器配置
        ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
                .defaultDisplayImageOptions(options)
                //构建
                .build();
        ImageLoader instance = ImageLoader.getInstance();
        //获得实例
        instance.init(configuration);
        //初始化
    }
}
2.Http类,代码如下:

package com.bawei.rui.http;

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

public class HttpUtil {
    public static String requestHttpGet(String strurl) {
        try {
            URL url = new URL(strurl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            int code = connection.getResponseCode();
            if (code == HttpURLConnection.HTTP_OK) {
                InputStream stream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(stream, "utf-8"));
                StringBuilder builder = new StringBuilder();
                String str = "";
                while ((str = reader.readLine()) != null) {
                    builder.append(str);
                }
                return builder.toString();
            }
            connection.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
2.1、MyAsyncTask,代码如下:

package com.bawei.rui.http;

import android.os.AsyncTask;

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

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

    @Override
    protected void onPostExecute(String s) {
        super.onPostExecute(s);
        backs.getdate(s);
    }

    public interface CallBacks {
        String getdate(String s);
    }

    private CallBacks backs;

    public void setBacks(CallBacks backs) {
        this.backs = backs;
    }
}
3.bean类,一个Date类,一个JsonBean类。先写Date类,代码如下:

package com.bawei.rui.bean;

public class Date {
    /* "author_name": "大众网",
             "category": "头条",
             "date": "2018-05-12 06:07",
             "thumbnail_pic_s": "http://07.imgmini.eastday.com/mobile/20180512/20180512060745_78550703b206b53ace6a0c51b1d737d4_1_mwpm_03200403.jpg",
             "title": "难忘救援经历 回忆激励前行 ",
             "uniquekey": "92ee0d2a31867a8f215b0517d99a9409",
             "url": "http://mini.eastday.com/mobile/180512060745166.html"
 },*/
    private String author_name;
    private String category;
    private String date;
    private String thumbnail_pic_s;
    private String title;
    private String uniquekey;
    private String url;

    public Date(String author_name) {
        this.author_name = author_name;
        this.category = category;
        this.date = date;
        this.thumbnail_pic_s = thumbnail_pic_s;
        this.title = title;
        this.uniquekey = uniquekey;
        this.url = url;
    }

    public String getAuthor_name() {
        return author_name;
    }

    public void setAuthor_name(String author_name) {
        this.author_name = author_name;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getThumbnail_pic_s() {
        return thumbnail_pic_s;
    }

    public void setThumbnail_pic_s(String thumbnail_pic_s) {
        this.thumbnail_pic_s = thumbnail_pic_s;
    }

    public String getTitle() {
        return title;
    }

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

    public String getUniquekey() {
        return uniquekey;
    }

    public void setUniquekey(String uniquekey) {
        this.uniquekey = uniquekey;
    }

    public String getUrl() {
        return url;
    }

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

    @Override
    public String toString() {
        return "Date{" +
                "author_name='" + author_name + '\'' +
                ", category='" + category + '\'' +
                ", date='" + date + '\'' +
                ", thumbnail_pic_s='" + thumbnail_pic_s + '\'' +
                ", title='" + title + '\'' +
                ", uniquekey='" + uniquekey + '\'' +
                ", url='" + url + '\'' +
                '}';
    }
}
在写JsonBean类,代码如下:

package com.bawei.rui.bean;

import java.util.ArrayList;

public class JsonBean {
    private String code;
    private ArrayList<Date> data;
    private String msg;

    public JsonBean(String code, ArrayList<Date> data, String msg) {
        this.code = code;
        this.data = data;
        this.msg = msg;
    }

    public String getCode() {
        return code;
    }

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

    public ArrayList<Date> getData() {
        return data;
    }

    public void setData(ArrayList<Date> data) {
        this.data = data;
    }

    public String getMsg() {
        return msg;
    }

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

    @Override
    public String toString() {
        return "JsonBean{" +
                "code='" + code + '\'' +
                ", data=" + data +
                ", msg='" + msg + '\'' +
                '}';
    }
}

4.第四步:在adapter里边写适配器类,代码如下:

1.MyFragmentAdapter:

package com.bawei.rui.adapter;

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

import java.util.ArrayList;

public class MyFragmentAdapter extends FragmentPagerAdapter {
    private ArrayList<Fragment> list;

    public MyFragmentAdapter(FragmentManager fm, ArrayList<Fragment> list) {
        super(fm);
        this.list = list;
    }

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

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

package com.bawei.rui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.bawei.rui.R;
import com.bawei.rui.bean.Date;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;


public class MyGridAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Date> list;

    public MyGridAdapter(Context context, ArrayList<Date> list) {
        this.context = context;
        this.list = list;
    }

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


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


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


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
            holder = new ViewHolder();
            holder.view = convertView.findViewById(R.id.name1);
            holder.img = convertView.findViewById(R.id.img1);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.view.setText(list.get(position).getAuthor_name());
        //
        ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder.img);
        return convertView;
    }

    class ViewHolder {
        TextView view;
        ImageView img;
    }
}
3.MyListviewAdapter:

package com.bawei.rui.adapter;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.bawei.rui.R;
import com.bawei.rui.bean.Date;
import com.nostra13.universalimageloader.core.ImageLoader;

import java.util.ArrayList;

public class MyListviewAdapter extends BaseAdapter {
    private Context context;
    private ArrayList<Date> list;

    public MyListviewAdapter(Context context, ArrayList<Date> list) {
        this.context = context;
        this.list = list;
    }

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


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


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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        switch (getItemViewType(position)) {

            case 0:
                ViewHolder0 holder0;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
                    holder0 = new ViewHolder0();
                    holder0.view0 = convertView.findViewById(R.id.name1);
                    holder0.img0 = convertView.findViewById(R.id.img1);
                    convertView.setTag(holder0);
                } else {
                    holder0 = (ViewHolder0) convertView.getTag();
                }
                holder0.view0.setText(list.get(position).getAuthor_name());
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder0.img0);
                break;
            case 1:
                ViewHolder1 holder1;
                if (convertView == null) {
                    convertView = LayoutInflater.from(context).inflate(R.layout.item_two, null);
                    holder1 = new ViewHolder1();
                    holder1.view1 = convertView.findViewById(R.id.name2);
                    holder1.img1 = convertView.findViewById(R.id.img2);
                    convertView.setTag(holder1);
                }else{
                    holder1 = (ViewHolder1) convertView.getTag();
                }
                holder1.view1.setText(list.get(position).getCategory()+"");
                ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder1.img1);
                break;
        }
        return convertView;
    }

    class ViewHolder0 {
        TextView view0;
        ImageView img0;
    }

    class ViewHolder1 {
        TextView view1;
        ImageView img1;
    }
}

第五步:建frag包类,一个FragGrid类,一个FragList类;

1.FragGrid里边代码如下:

package com.bawei.rui.frag;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;

import com.bawei.rui.R;
import com.bawei.rui.adapter.MyGridAdapter;
import com.bawei.rui.bean.Date;
import com.bawei.rui.bean.JsonBean;
import com.bawei.rui.http.MyAsyncTask;
import com.google.gson.Gson;

import java.util.ArrayList;

public class FragGrid extends Fragment implements MyAsyncTask.CallBacks {

    private GridView gridView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_grid, container, false);
        gridView = view.findViewById(R.id.gridview);
        MyAsyncTask myAsyncTask = new MyAsyncTask();
        myAsyncTask.setBacks(this);
        myAsyncTask.execute("http://www.xieast.com/api/news/news.php?page=1");
        return  view;
    }

    @Override
    public String getdate(String s) {
        Gson gson = new Gson();
        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
        ArrayList<Date> data = jsonBean.getData();
        gridView.setAdapter(new MyGridAdapter(getActivity(),data));
        return null;
    }
}
2.FragList里边代码如下:

package com.bawei.rui.frag;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.bawei.rui.R;
import com.bawei.rui.adapter.MyListviewAdapter;
import com.bawei.rui.bean.Date;
import com.bawei.rui.bean.JsonBean;
import com.bawei.rui.http.HttpUtil;
import com.google.gson.Gson;
import com.qy.xlistview.XListView;

import java.text.SimpleDateFormat;
import java.util.ArrayList;

public class FragList extends Fragment {
    private MyListviewAdapter listviewAdapter;
    private ArrayList<Date> data;
    private XListView xListView;
    private String str = "http://www.xieast.com/api/news/news.php?page=1";
    private Date date;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_list, container, false);
        xListView = view.findViewById(R.id.xlistview);
        xListView.setPullLoadEnable(true);
        xListView.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        String s = HttpUtil.requestHttpGet(str);
                        Gson gson = new Gson();
                        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                        ArrayList<Date> data = jsonBean.getData();
                        Message message = new Message();
                        message.what = 1;
                        message.obj = data;
                        handler.sendMessage(message);
                    }
                }.start();
            }

            @Override
            public void onLoadMore() {
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
                        String s = HttpUtil.requestHttpGet(str);
                        Gson gson = new Gson();
                        JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                        ArrayList<Date> ddd = jsonBean.getData();
                        Message message = new Message();
                        message.what = 1;
                        message.obj = data;
                        handler.sendMessage(message);
                    }
                }.start();
            }
        });
        new Thread() {
            @Override
            public void run() {
                super.run();
                String s = HttpUtil.requestHttpGet(str);
                Gson gson = new Gson();
                JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
                ArrayList<Date> data = jsonBean.getData();
                Message message = new Message();
                message.what = 0;
                message.obj = data;
                handler.sendMessage(message);
            }
        }.start();
        return view;
    }

    private void onLoad() {
        xListView.stopRefresh();;
        xListView.stopLoadMore();
        xListView.setRefreshTime(date+"");
        date = new Date(System.currentTimeMillis()+"");

    }
  /*  SimpleDateFormat    formatter    =   new    SimpleDateFormat    ("yyyy年MM月dd日    HH:mm:ss     ");
    Date    curDate    =   new    Date(System.currentTimeMillis());//获取当前时间
    String    str    =    formatter.format(curDate);*/


    Handler handler = new Handler() {


        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case 0:
                    data = (ArrayList<Date>) msg.obj;
                    listviewAdapter = new MyListviewAdapter(getActivity(), data);
                    xListView.setAdapter(listviewAdapter);
                    onLoad();
                    break;
                case 1:
                    xListView.setAdapter(listviewAdapter);
                    onLoad();
                    break;
                case 2:
                    ArrayList<Date> ddd = (ArrayList<Date>) msg.obj;
                    xListView.setAdapter(new MyListviewAdapter(getActivity(), ddd));
                    onLoad();
                    break;

            }
        }
    };

}
第六步、也就是最后一步记得写权限:

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

在<application里边要记得加上android:name=".app.App"></application>

猜你喜欢

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