在MainActivity
public class MainActivity extends BaseActivity implements DrawerLayout.DrawerListener, RadioGroup.OnCheckedChangeListener {
private DrawerLayout dl;
private RadioGroup rg;
private Frag01 frag01;
private Frag02 frag02;
private Frag03 frag03;
private FragmentManager manager;
@Override
public int onResID() {
return R.layout.activity_main;
}
@Override
public void onView() {
//找控件
dl = findViewById(R.id.m_dl);
rg = findViewById(R.id.m_rg);
dl.addDrawerListener(this);
rg.setOnCheckedChangeListener(this);
}
@Override
public void onData() {
//fragment管理者
manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
//添加fragment
frag01 = new Frag01();
frag02 = new Frag02();
frag03 = new Frag03();
transaction.add(R.id.m_fl,frag01);
transaction.add(R.id.m_fl,frag02);
transaction.add(R.id.m_fl,frag03);
//默认显示第一个
transaction.show(frag01).hide(frag02).hide(frag03);
//开启事物
transaction.commit();
}
@Override
public void onDrawerSlide(@NonNull View view, float v) {
}
@Override
public void onDrawerOpened(@NonNull View view) {
}
@Override
public void onDrawerClosed(@NonNull View view) {
}
@Override
public void onDrawerStateChanged(int i) {
}
//点击判断显示与隐藏页面
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction transaction1 = manager.beginTransaction();
switch (checkedId){
//显示第一页
case R.id.m_rb1:
transaction1.show(frag01).hide(frag02).hide(frag03);
break;
//显示第二页
case R.id.m_rb2:
transaction1.hide(frag01).show(frag02).hide(frag03);
break;
//显示第三页
case R.id.m_rb3:
transaction1.hide(frag01).hide(frag02).show(frag03);
break;
}
transaction1.commit();
}
}
下拉适配器
public class PullToAdapter extends BaseAdapter {
private Context context;
private ArrayList<NetBan.DataBean> list;
private final int TYPE0 = 0;
private final int TYPE1 = 1;
DisplayImageOptions options = new DisplayImageOptions.Builder()
.displayer(new RoundedBitmapDisplayer(20))
.build();
public PullToAdapter(Context context, ArrayList<NetBan.DataBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return list.size();
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return TYPE0;
} else {
return TYPE1;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = null;
int type = getItemViewType(position);
if (convertView == null) {
switch (type) {
case TYPE0:
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.item01, null);
viewHolder.textView1 = convertView.findViewById(R.id.i_tv1);
viewHolder.imageView1=convertView.findViewById(R.id.i_iv1);
convertView.setTag(viewHolder);
break;
case TYPE1:
viewHolder = new ViewHolder();
convertView = View.inflate(context, R.layout.item02, null);
viewHolder.textView2 = convertView.findViewById(R.id.i_tv2);
viewHolder.imageView21=convertView.findViewById(R.id.i_iv21);
viewHolder.imageView22=convertView.findViewById(R.id.i_iv22);
viewHolder.imageView23=convertView.findViewById(R.id.i_iv23);
convertView.setTag(viewHolder);
break;
}
}
viewHolder = (ViewHolder) convertView.getTag();
switch (type){
case TYPE0:
viewHolder.textView1.setText(list.get(position).getNews_title());
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHolder.imageView1,options);
break;
case TYPE1:
viewHolder.textView2.setText(list.get(position).getNews_title());
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHolder.imageView21,options);
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHolder.imageView22,options);
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHolder.imageView23,options);
break;
}
return convertView;
}
class ViewHolder {
TextView textView1;
TextView textView2;
ImageView imageView1;
ImageView imageView21;
ImageView imageView22;
ImageView imageView23;
}
}
//另一个适配器
public class TbAdapter extends FragmentPagerAdapter {
private ArrayList<String>list;
public TbAdapter(FragmentManager fm, ArrayList<String> list) {
super(fm);
this.list = list;
}
public TbAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
//动态创建Fragment
Fragments fragments = new Fragments();
Bundle bundle = new Bundle();
bundle.putInt("position",i);
//共享Fragment的下标
fragments.setArguments(bundle);
return fragments;
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return list.get(position);
}
}
///Application
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(build);
}
}
////基类
public abstract class BaseFragment extends Fragment {
private boolean isCreateView;
private boolean isVisibleHint;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getContext(), onResID(), null);
onView(view);
isCreateView = true;
lazyLoad();
return view;
}
public abstract int onResID();
public abstract void onView(View view);
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
isVisibleHint = true;
lazyLoad();
} else {
isVisibleHint = false;
}
}
private void lazyLoad() {
if (isCreateView && isVisibleHint) {
onData();
isVisibleHint = false;
isCreateView = false;
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
isVisibleHint = false;
isCreateView = false;
}
public abstract void onData();
}
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(onResID());
onView();
onData();
}
public abstract int onResID();
public abstract void onView();
public abstract void onData();
}
//自己写Bean类
//写Fragment
public class Frag01 extends BaseFragment {
private TabLayout tl;
private ViewPager vp;
@Override
public int onResID() {
return R.layout.frag01;
}
//找控件
@Override
public void onView(View view) {
tl = view.findViewById(R.id.f_tl);
vp = view.findViewById(R.id.f_vp);
//TabLauy集合
ArrayList<String> tbList = getTbList();
//动态添加Fragment的适配器
vp.setAdapter(new TbAdapter(getChildFragmentManager(), tbList));
//TabLauy与Viewpager关联
vp.setOffscreenPageLimit(tbList.size());
tl.setupWithViewPager(vp);
}
//返回TabLauy集合
private ArrayList<String> getTbList() {
ArrayList<String> tblist = new ArrayList<>();
tblist.add("推荐");
tblist.add("热门");
tblist.add("科技");
tblist.add("搞笑");
tblist.add("美女");
tblist.add("关注");
tblist.add("热搜");
return tblist;
}
@Override
public void onData() {
}
}
public class Frag02 extends BaseFragment {
@Override
public int onResID() {
return R.layout.frag02;
}
@Override
public void onView(View view) {
}
@Override
public void onData() {
}
}
public class Frag03 extends BaseFragment {
@Override
public int onResID() {
return R.layout.frag01;
}
@Override
public void onView(View view) {
}
@Override
public void onData() {
}
}
public class Fragments extends BaseFragment {
private TextView te;
private Handler handler = new Handler();
private String path = "http://api.expoon.com/AppNews/getNewsList";
private int page = 1;
private ArrayList<NetBan.DataBean> list = null;
private int type;
private PullToRefreshListView pl;
@Override
public int onResID() {
return R.layout.fragments;
}
//找控件
@Override
public void onView(View view) {
int position = getArguments().getInt("position");
position = position % 3;
pl = view.findViewById(R.id.fs_pl);
//根据type判断这是什么类型
//显示对应的数据
type = position + 1;
//设置上拉下拉
pl.setPullToRefreshEnabled(true);
//设置模式
pl.setMode(PullToRefreshBase.Mode.BOTH);
}
@Override
public void onData() {
//上拉下拉点击事件
pl.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//判断网络
boolean netWork = Network.isNetWork(getContext());
if (netWork) {//有网
page = 1;
handler.postDelayed(new Runnable() {
@Override
public void run() {
getASync(path + "/type/" + type + "/p/" + page);
//关闭刷新
pl.onRefreshComplete();
}
}, 2000);
} else {//没网
//提示用户没网
Toast.makeText(getActivity(), "请链接网络在次刷新", Toast.LENGTH_SHORT).show();
//两秒后关闭刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
//关闭刷新
pl.onRefreshComplete();
}
}, 2000);
}
}
//上拉
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
boolean netWork = Network.isNetWork(getContext());
if (netWork) {//有网
page++;
handler.postDelayed(new Runnable() {
@Override
public void run() {
getASync(path + "/type/" + type + "/p/" + page);
//关闭刷新
pl.onRefreshComplete();
}
}, 2000);
} else {//没网
//提示用户没网
Toast.makeText(getActivity(), "请链接网络在次加载", Toast.LENGTH_SHORT).show();
//两秒后关闭刷新
handler.postDelayed(new Runnable() {
@Override
public void run() {
//关闭刷新
pl.onRefreshComplete();
}
}, 2000);
}
}
});
//广播监听网络
getData();
}
//广播监听网络
public void getData() {
isNet isNet = new isNet();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
getActivity().registerReceiver(isNet, filter);
}
private class isNet extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//判断网络
boolean netWork = Network.isNetWork(getContext());
//有网做请求数据
if (netWork) {
getASync(path + "/type/" + type + "/p/" + page);
} else {
//没网做数据库
SqlDao sqlDao = new SqlDao(getActivity());
list = new ArrayList<>();
Cursor lianxi01 = sqlDao.query("lianxi01", null, null, null, null, null, null);
//判断有没有第一条
if (lianxi01.moveToFirst()) {
NetBan.DataBean dataBean2 = new NetBan.DataBean();
//循环取值
do {
dataBean2.setNews_title(lianxi01.getString(lianxi01.getColumnIndex("title")));
dataBean2.setPic_url(lianxi01.getString(lianxi01.getColumnIndex("image")));
list.add(dataBean2);
} while (lianxi01.moveToNext());
} else {
return;
}
//关闭游标
lianxi01.close();
//适配器
PullToAdapter pullToAdapter = new PullToAdapter(getActivity(), list);
pl.setAdapter(pullToAdapter);
}
}
}
private void getASync(String path) {
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute(path);
}
private class MyAsyncTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... strings) {
return NetConnection.isNetConnection(strings[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
//判断返回的字符串是否为空
if (s == null) {
return;
}
//gson解析
Gson gson = new Gson();
NetBan netBan = gson.fromJson(s, NetBan.class);
//解析后得到的集合
List<NetBan.DataBean> data = netBan.getData();
//吧集合添加到一个新的集合做上拉加载用
if (page == 1) {
list = new ArrayList<>();
//吧数据存入集合做无网
SqlDao sqlDao = new SqlDao(getActivity());
//每次添加数据库前清空数据
sqlDao.delete("lianxi01", null, null);
//循环添加数据库
for (int i = 0; i < data.size(); i++) {
ContentValues values = new ContentValues();
values.put("title", data.get(i).getNews_title());
values.put("image", data.get(i).getPic_url());
sqlDao.add("lianxi01", null, values);
}
}
list.addAll(data);
//吧新的集合添加到适配器
PullToAdapter pullToAdapter = new PullToAdapter(getActivity(), list);
pl.setAdapter(pullToAdapter);
//定位上拉加载后的位置
pl.setSelection(pullToAdapter.getCount() - data.size());
}
}
}
//写数据库
public class SqlDao {
private final SQLiteDatabase db;
//创建有参构造
public SqlDao(Context context) {
MySql mySql = new MySql(context);
//数据库管理
db = mySql.getWritableDatabase();
}
//添加
public long add(String table, String nullColumnHack, ContentValues values) {
return db.insert(table, nullColumnHack, values);
}
//查询
public Cursor query(String table, String[] columns, String selection,
String[] selectionArgs, String groupBy, String having,
String orderBy) {
return db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);
}
//删除
public long delete(String table, String whereClause, String[] whereArgs){
return db.delete(table, whereClause, whereArgs);
}
}
public class MySql extends SQLiteOpenHelper {
public MySql(Context context) {
//上下文,数据库名,工厂,版本号
super(context, "bawei.Lianxi", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建表
db.execSQL("create table lianxi01 (id integer primary key autoincrement,title Text,image Text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
//Utils
public class NetConnection {
public static String isNetConnection(String path) {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == 200) {
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len = 0;
while ((len = inputStream.read(bytes)) != -1) {
stream.write(bytes, 0, len);
}
stream.close();
inputStream.close();
String data = stream.toString();
return data;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
public class Network {
public static boolean isNetWork(Context context) {
//网络判断
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if(info!=null){
//有网
return info.isAvailable();
}
//没有网
return false;
}
}
//布局
//Mainlayout
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v4.widget.DrawerLayout
android:id="@+id/m_dl"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/m_fl"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</FrameLayout>
<RadioGroup
android:id="@+id/m_rg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/m_rb1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="aa"
android:textSize="35sp" />
<RadioButton
android:id="@+id/m_rb2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="aa"
android:textSize="35sp" />
<RadioButton
android:id="@+id/m_rb3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:gravity="center"
android:text="aa"
android:textSize="35sp" />
</RadioGroup>
</LinearLayout>
<FrameLayout
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/colorAccent">
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
//frag01
<LinearLayout
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@color/colorAccent">
<EditText
android:id="@+id/ho_EditText"
android:layout_width="match_parent"
android:layout_height="35dp"
android:layout_gravity="center"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:background="@drawable/yuanjiao"
android:cursorVisible="true"
android:gravity="center_vertical"
android:hint="搜索"
android:inputType="text|textMultiLine"
android:textCursorDrawable="@null"
android:textSize="20sp" />
</LinearLayout>
<android.support.design.widget.TabLayout
android:id="@+id/f_tl"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabIndicatorHeight="0dp"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorAccent">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/f_vp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</android.support.v4.view.ViewPager>
` //frag02
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
</LinearLayout>
//fragments
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/fs_pl"
android:layout_width="match_parent"
android:layout_height="match_parent">
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
//item1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/i_tv1"
android:layout_width="wrap_content"
android:layout_weight="1"
android:layout_height="120dp"
android:text="123"
android:textSize="25sp" />
<ImageView
android:id="@+id/i_iv1"
android:layout_width="150dp"
android:layout_height="120dp"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
//item2
<?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"
android:orientation="vertical">
<TextView
android:id="@+id/i_tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="aa"
android:textSize="25sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/i_iv21"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/i_iv22"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher" />
<ImageView
android:id="@+id/i_iv23"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_weight="1"
android:src="@mipmap/ic_launcher" />
</LinearLayout>
</LinearLayout>