fragmenttwo.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#ffcccc">
<android.support.design.widget.TabLayout
android:id="@+id/taba"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:tabMaxWidth="0dp"
app:tabGravity="fill"
app:tabMode="fixed"
></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/taba"
app:layout_constraintBottom_toBottomOf="parent"
></android.support.v4.view.ViewPager>
</android.support.constraint.ConstraintLayout>
第二个布局里的抽屉布局:
Fragmenttwo:
public class Fragmenttwo extends BaseFragment {
private TabLayout tab;
private ViewPager viewPager;
@Override
protected void initData() {
}
@Override
protected void initView(View view) {
tab = view.findViewById(R.id.taba);
viewPager = view.findViewById(R.id.pager);
TwoAdapter twoAdapter=new TwoAdapter(getChildFragmentManager());
viewPager.setAdapter(twoAdapter);
tab.setupWithViewPager(viewPager);
}
@Override
protected int getLayoutResId() {
return R.layout.fragmenttwo;
}
}
适配器:
TwoAdapter:
public class Fragmenttwo extends BaseFragment {
private TabLayout tab;
private ViewPager viewPager;
@Override
protected void initData() {
}
@Override
protected void initView(View view) {
tab = view.findViewById(R.id.taba);
viewPager = view.findViewById(R.id.pager);
TwoAdapter twoAdapter=new TwoAdapter(getChildFragmentManager());
viewPager.setAdapter(twoAdapter);
tab.setupWithViewPager(viewPager);
}
@Override
protected int getLayoutResId() {
return R.layout.fragmenttwo;
}
}
frag.xml:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#ff6699"
android:layout_height="match_parent">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pulllist"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
></com.handmark.pulltorefresh.library.PullToRefreshListView>
</android.support.constraint.ConstraintLayout>
刷新加载:
Frag:
public class Frag extends BaseFragment {
private int page;
private String url;
private PullToRefreshListView pull;
private ZhengJiAdapter zhengJiAdapter;
private final int COUNT=10;
@Override
protected void initData() {
NetUtil.yibu(url + page, ZhengJiBean.class, new NetUtil.CallBack<ZhengJiBean>() {
@Override
public void getdata(ZhengJiBean o) {
if (!o.ispanduan()||o==null){
Toast.makeText(getActivity(), "数据请求错误", Toast.LENGTH_SHORT).show();
//停止刷新加载
pull.onRefreshComplete();
return ;
}
if (page==1){
Dao.getInstance(getActivity()).del(url.hashCode());
}
Dao.getInstance(getActivity()).addall(url.hashCode(),o.getResult());
if(page==1){
//从数据库中获取
List<ZhengJiBean.Res> query = Dao.getInstance(getActivity()).query(url.hashCode());
zhengJiAdapter.setList(query);
//zhengJiAdapter.setList(o.getResult());
}else{
List<ZhengJiBean.Res> query = Dao.getInstance(getActivity()).query(url.hashCode());
zhengJiAdapter.addList(query);
//dzhengJiAdapter.addList(o.getResult());
}
pull.onRefreshComplete();
page++;
if (o.getResult().size()<COUNT){
pull.setMode(PullToRefreshBase.Mode.PULL_FROM_START);
}else{
pull.setMode(PullToRefreshBase.Mode.BOTH);
}
}
});
}
@Override
protected void initView(View view) {
url = getArguments().getString("url");
page=1;
//获取资源ID
pull = view.findViewById(R.id.pulllist);
//设置适配器
zhengJiAdapter = new ZhengJiAdapter(getActivity());
pull.setAdapter(zhengJiAdapter);
//同时支持刷新上拉
pull.setMode(PullToRefreshBase.Mode.BOTH);
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
page=1;
initData();
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
initData();
}
});
}
@Override
protected int getLayoutResId() {
return R.layout.frag;
}
}
Bean:
ZhengJiBean:
public class ZhengJiBean {
public String status;
public String PAN="0000";
public List<Res> result;
public boolean ispanduan(){
return PAN.equals(status);
}
public String getStatus() {
return status;
}
public List<Res> getResult() {
return result;
}
public static class Res{
public String imageUrl;
public String name;
public String summary;
public Res() {
}
public Res(String imageUrl, String name, String summary) {
this.imageUrl = imageUrl;
this.name = name;
this.summary = summary;
}
public String getImageUrl() {
return imageUrl;
}
public String getName() {
return name;
}
public String getSummary() {
return summary;
}
}
}
Image-loader:
App:
public class App extends AppApplication {
@Override
public void onCreate() {
super.onCreate();
DisplayImageOptions options=new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisk(true)
.displayer(new RoundedBitmapDisplayer(20))
.build();
ImageLoaderConfiguration configuration=new ImageLoaderConfiguration.Builder(this)
.memoryCacheSizePercentage(10)
.diskCacheSize(20*1024*1024)
.defaultDisplayImageOptions(options)
.build();
ImageLoader.getInstance().init(configuration);
}
}
适配器:
ZhengJiAdapter:
public class ZhengJiAdapter extends BaseAdapter {
private List<ZhengJiBean.Res> list;
private Context context;
public ZhengJiAdapter(Context context) {
this.context = context;
list=new ArrayList<>();
}
//更新刷新
public void setList(List<ZhengJiBean.Res> slist) {
list.clear();
if (slist!=null){
list.addAll(slist);
}
notifyDataSetChanged();
}
//上拉加载
public void addList(List<ZhengJiBean.Res> slist) {
if (slist!=null){
list.addAll(slist);
}
notifyDataSetChanged();
}
@Override
public int getCount() {
return list.size();
}
@Override
public ZhengJiBean.Res 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) {
ViewHolder holder;
if (convertView==null){
convertView=LayoutInflater.from(context).inflate(R.layout.zhengji,parent,false);
holder=new ViewHolder(convertView);
}else{
holder= (ViewHolder) convertView.getTag();
}
holder.getdata(getItem(position));
return convertView;
}
class ViewHolder{
private ImageView image;
private TextView title;
private TextView neirong;
public ViewHolder(View convertView) {
image=convertView.findViewById(R.id.im);
title=convertView.findViewById(R.id.title);
neirong=convertView.findViewById(R.id.neirong);
convertView.setTag(this);
}
public void getdata(ZhengJiBean.Res item) {
ImageLoader.getInstance().displayImage(item.getImageUrl(),image);
title.setText(item.getName());
neirong.setText(item.getSummary());
}
}
}
子条目布局:
zhengji.xml:
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<ImageView
android:id="@+id/im"
android:layout_width="100dp"
android:layout_height="100dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/title"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/im"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textSize="17sp"
android:layout_margin="5dp"
/>
<TextView
android:id="@+id/neirong"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toRightOf="@id/im"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/title"
android:lines="2"
android:layout_margin="5dp"
/>
</android.support.constraint.ConstraintLayout>
网络工具类:
NetUtil:
public class NetUtil {
//接口回调
public interface CallBack<T>{
void getdata(T t);
}
public static void yibu(String lujing, final Class clazz, final CallBack callBack) {
new AsyncTask<String, Void, Object>() {
@Override
protected Object doInBackground(String... strings) {
return NetUtil.jiexi(strings[0],clazz);
}
@Override
protected void onPostExecute(Object o) {
callBack.getdata(o);
}
}.execute(lujing);
}
//网络解析
public static <T> T jiexi(String lujing,Class clazz){
T t= (T) new Gson().fromJson(NetUtil.geturl(lujing),clazz);
return t;
}
//网络请求
public static String geturl(String lujing){
String result="";
try {
//定义地址
URL url=new URL(lujing);
//打开连接
HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
//请求方法
urlConnection.setRequestMethod("GET");
//读取超时
urlConnection.setReadTimeout(5000);
//连接超时
urlConnection.setConnectTimeout(5000);
if (urlConnection.getResponseCode()==200){
result=NetUtil.zifu(urlConnection.getInputStream());
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static String zifu(InputStream inputStream) throws IOException {
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader buff=new BufferedReader(inputStreamReader);
StringBuilder builder=new StringBuilder();
for (String imp=buff.readLine();imp!=null;imp=buff.readLine()){
builder.append(imp);
}
return builder.toString();
}
}
数据库:
SqliteHelper:
public class SqliteHelper extends SQLiteOpenHelper {
private static final String name="User.db";
private static final int version=1;
public SqliteHelper(@Nullable Context context) {
super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table users (id integer primary key autoincrement," +
"name text," +
"message text," +
"image text," +
"type integer)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Dao:
public class Dao {
private static Dao instance;
private SqliteHelper helper;
private SQLiteDatabase sb;
private Dao(Context context){
helper=new SqliteHelper(context);
sb=helper.getReadableDatabase();
}
public static Dao getInstance(Context context){
if (instance==null){
instance=new Dao(context);
}
return instance;
}
public void add(ZhengJiBean.Res res,int type){
ContentValues values=new ContentValues();
values.put("name",res.getName());
values.put("message",res.getSummary());
values.put("image",res.getImageUrl());
values.put("type",type);
sb.insert("users",null,values);
}
public void addall(int type, List<ZhengJiBean.Res> list){
for (ZhengJiBean.Res cc:list){
add(cc,type);
}
}
public void del(int type){
sb.delete("users","type=?",new String[]{String.valueOf(type)});
}
public List<ZhengJiBean.Res> query(int type){
List<ZhengJiBean.Res> list=new ArrayList<>();
Cursor cursor = sb.query("users", null, "type=?", new String[]{String.valueOf(type)}, null, null, null);
if (cursor!=null){
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String message=cursor.getString(cursor.getColumnIndex("message"));
String image = cursor.getString(cursor.getColumnIndex("image"));
ZhengJiBean.Res res=new ZhengJiBean.Res(image,name,message);
list.add(res);
}
cursor.close();
}
return list;
}
}