1.QQ界面,侧滑和PullDownToRefresh
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
public class MainActivity extends FragmentActivity {
private FragmentManager fragment;
private FragmentTransaction transaction;
private FragList fragList;
private FragGrad fragGrad;
private RadioGroup radioGroup;
private DrawerLayout drawerLayout;
private PullToRefreshListView pulllist;
String str = "http://www.xieast.com/api/news/news.php?page=1";
private PullAdter adter;
private List<JsonBean.DataBean> data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//侧滑
drawerLayout = (DrawerLayout)findViewById(R.id.draw);
//侧滑里的ullToRefreshListView
pulllist = (PullToRefreshListView) findViewById(R.id.pulllist);
fragment = getSupportFragmentManager();
transaction = fragment.beginTransaction();
fragList = new FragList();
fragGrad = new FragGrad();
transaction.add(R.id.fragment,fragList);
transaction.add(R.id.fragment,fragGrad);
transaction.replace(R.id.fragment,fragList);
transaction.commit();
radioGroup = findViewById(R.id.radioGroup);
radioGroup.check(radioGroup.getChildAt(0).getId());
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//因为事务提交,已经失效了,需要再次开启事务
FragmentTransaction transaction1 = fragment.beginTransaction();
switch (checkedId) {
case R.id.radioButton0:
transaction1.replace(R.id.fragment,fragList);
break;
case R.id.radioButton1:
transaction1.replace(R.id.fragment,fragGrad);
break;
}
transaction1.commit();
}
});
// 侧滑
drawerLayout.openDrawer(Gravity.LEFT);
drawerLayout.closeDrawer(Gravity.LEFT);
//PullToRefreshBase
pulllist.setMode(PullToRefreshBase.Mode.BOTH);
//设置是否允许刷新的时候可以滑动()
pulllist.setScrollingWhileRefreshingEnabled(true);
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data = jsonBean.getData();
adter = new PullAdter(MainActivity.this, data);
pulllist.setAdapter(adter);
}
});
//监听事件
pulllist.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data = jsonBean.getData();
adter = new PullAdter(MainActivity.this, data);
pulllist.setAdapter(adter);
pulllist.onRefreshComplete();
}
});
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
List<JsonBean.DataBean> data1 = jsonBean.getData();
data.addAll(data1);
adter.notifyDataSetChanged();
pulllist.onRefreshComplete();
}
});
}
});
}
}
2.布局
<?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"
tools:context=".MainActivity"
android:orientation="vertical"
>
<android.support.v4.widget.DrawerLayout
android:id="@+id/draw"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
>
<FrameLayout
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9" />
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/radioButton0"
android:text="11"
android:button="@null"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:drawableTop="@drawable/select1"
/>
<RadioButton
android:id="@+id/radioButton1"
android:text="11"
android:button="@null"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:drawableTop="@drawable/select2"
/>
</RadioGroup>
</LinearLayout>
<!--侧滑界面-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="left"
android:background="#ded3d3"
android:orientation="vertical"
>
<ImageView
android:id="@+id/imag"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@mipmap/ic_launcher_round"
/>
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pulllist"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
</LinearLayout>
3.PullToRefreshListView的适配器
/**
* @Auther: 付明锟
* @Date: 2019/1/9 15:58:57
* @Description:
*/
public class PullAdter extends BaseAdapter {
private Context context;
private List<JsonBean.DataBean> data;
public PullAdter(Context context, List<JsonBean.DataBean> data) {
this.context = context;
this.data = data;
}
@Override
public int getCount() {
return data.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:
Holder holder;
if (convertView == null){
convertView = View.inflate(context,R.layout.item1,null);
holder = new Holder();
holder.name = convertView.findViewById(R.id.name);
holder.imag = convertView.findViewById(R.id.imag);
convertView.setTag(holder);
}
else{
holder = (Holder) convertView.getTag();
}
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true)//让图片进行内存缓存
.cacheOnDisk(true).build();
JsonBean.DataBean dataBean = data.get(position);
holder.name.setText(dataBean.getAuthor_name());
ImageLoader.getInstance().displayImage(dataBean.getThumbnail_pic_s(),holder.imag);
break;
case 1:
Holder2 holder2;
if (convertView == null){
convertView = View.inflate(context,R.layout.item2,null);
holder2 = new Holder2();
holder2.name2 = convertView.findViewById(R.id.name2);
holder2.imag2 = convertView.findViewById(R.id.imag2);
convertView.setTag(holder2);
}
else{
holder2 = (Holder2) convertView.getTag();
}
JsonBean.DataBean dataBean2 = data.get(position);
holder2.name2.setText(dataBean2.getAuthor_name());
ImageLoader.getInstance().displayImage(dataBean2.getThumbnail_pic_s(),holder2.imag2);
break;
}
return convertView;
}
class Holder{
ImageView imag;
TextView name;
}
class Holder2{
ImageView imag2;
TextView name2;
}
}
4.ImagLoad
/**
* @Auther: 付明锟
* @Date: 2019/1/9 16:26:21
* @Description:
*/
public class ImagLoad extends Application {
@Override
public void onCreate() {
super.onCreate();
String path = Environment.getExternalStorageDirectory().getPath()+"/111";
File file = new File(path);
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(200,200)
.memoryCacheSize(2*1024*1024)
.threadPoolSize(3)
.threadPriority(1000)
.diskCache(new UnlimitedDiskCache(file))
.diskCacheFileCount(50)
.diskCacheFileNameGenerator(new Md5FileNameGenerator())
.diskCacheSize(50*1024*1024)
.build();
ImageLoader.getInstance().init(configuration);
}
}
5.Http
/**
* @Auther: 付明锟
* @Date: 2019/1/4 14:10:54
* @Description:
*/
public class Http {
public static void httpAsynTask (String str,final CallBackString backString){
new AsyncTask<String,Integer,String>(){
//子线程
@Override
protected String doInBackground(String... strings) {
return reputHttpGet(strings[0]);
}
//主线程
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
backString.getData(s);
}
}.execute(str);
}
//接口
public interface CallBackString{
void getData(String s);
}
public CallBackString backString;
public void setBackString(CallBackString backString) {
this.backString = backString;
}
//http
public static String reputHttpGet(String s){
try {
URL url = new URL(s);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(stream,"utf-8"));
StringBuilder builder = new StringBuilder();
String st="";
while ((st = reader.readLine())!=null){
builder.append(st);
}
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
6.数据库sql层和dao层
/**
* @Auther: 付明锟
* @Date: 2019/1/9 20:42:24
* @Description:
*/
public class MySql extends SQLiteOpenHelper {
public MySql(Context context) {
super(context, "bw.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table pers(id integer primary key," +
"title TEXT," +
"url TEXT,"+
"thumbnail_pic_s TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
Dao
import android.database.sqlite.SQLiteDatabase;
/**
* @Auther: 付明锟
* @Date: 2019/1/9 20:48:55
* @Description:
*/
public class Dao {
private SQLiteDatabase db;
public Dao(Context context){
MySql mySql = new MySql(context);
db = mySql.getWritableDatabase();
}
//插入数据
public long insert(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);
}
}
7.PullToRefreshListView + 数据库
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
/**
* @Auther: 付明锟
* @Date: 2019/1/9 11:53:28
* @Description:
*/
public class FragList extends Fragment {
private PullToRefreshListView pullListView;
String str = "http://www.xieast.com/api/news/news.php?page=1";
private ListAdter adter;
private List<JsonBean.DataBean> data;
private Dao dao;
private Cursor cursor;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraglist, container,false);
pullListView = (PullToRefreshListView) view.findViewById(R.id.pullListView);
//设置刷新方式
pullListView.setMode(PullToRefreshBase.Mode.BOTH);
//设置是否允许刷新的时候可以滑动
pullListView.setScrollingWhileRefreshingEnabled(true);
//请求数据库
dao = new Dao(getActivity());
cursor = dao.query("pers", null, null, null, null, null, null);
data = new ArrayList<JsonBean.DataBean>();
if (cursor.moveToFirst()){
do {
/* String title = cursor.getString(cursor.getColumnIndex("title"));*/
String url = cursor.getString(cursor.getColumnIndex("url"));
String thumbnail_pic_s = cursor.getString(cursor.getColumnIndex("thumbnail_pic_s"));
}while(cursor.moveToNext());
}
cursor.close();
adter = new ListAdter(getActivity(), data);
pullListView.setAdapter(adter);
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data = jsonBean.getData();
//添加数据
for (JsonBean.DataBean bean:data){
ContentValues values = new ContentValues();
values.put("title",bean.getTitle());
/* values.put("url",bean.getAuthor_name());*/
values.put("thumbnail_pic_s",bean.getThumbnail_pic_s());
dao.insert("pers",null,values);
}
//适配器
adter = new ListAdter(getActivity(), data);
pullListView.setAdapter(adter);
}
});
//监听
pullListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data = jsonBean.getData();
//适配器
pullListView.setAdapter(adter);
pullListView.onRefreshComplete();
}
});
}
//上拉加载
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
List<JsonBean.DataBean> data2 = jsonBean.getData();
data.addAll(data2);
adter.notifyDataSetChanged();
pullListView.onRefreshComplete();
}
});
}
});
return view;
}
}
8.另一种,可以网络判断一下
/**
* @Auther: 付明锟
* @Date: 2019/1/10 15:42:32
* @Description:
*/
public class FragList extends Fragment {
private PullToRefreshListView pullToList;
private Cursor cursor;
String str = "https://api.apiopen.top/musicRankings";
private ListAdter adter;
private Dao dao;
private List<JsonBean.ResultBean> data1;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fraglist,container,false);
pullToList = view.findViewById(R.id.pullToList);
// 设置刷新的模式:常用的有三种
// PullToRefreshBase.Mode.BOTH 上下拉刷新都可以
pullToList.setMode(PullToRefreshListView.Mode.BOTH);
// 第三步:设置是否允许刷新的时候可以滑动()
pullToList.setScrollingWhileRefreshingEnabled(true);
dao = new Dao(getActivity());
//判断有没有网络
if (Http.isBABoolean(getActivity())){
//如果有网就请求网络
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
gsonj(s);
}
});
}
else{
//如果没有网络,就请求数据库中的数据
cursor = dao.query("pers", null, null, null, null, null, null);
data1 = new ArrayList<JsonBean.ResultBean>();
if (cursor.moveToFirst()){
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
String thumbnail_pic_s = cursor.getString(cursor.getColumnIndex("thumbnail_pic_s"));
data1.add(new JsonBean.ResultBean(name,thumbnail_pic_s));
}while(cursor.moveToNext());
}
Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
cursor.close();
adter = new ListAdter(getActivity(), data1);
pullToList.setAdapter(adter);
}
/* Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data1 = jsonBean.getResult();
//添加数据
for (JsonBean.ResultBean bean: data1){
ContentValues values = new ContentValues();
values.put("title",bean.getName());
values.put("thumbnail_pic_s",bean.getPic_s444());
dao.insert("pers",null,values);
}
//适配器
adter = new ListAdter(getActivity(), data1);
pullToList.setAdapter(adter);
}
});*/
//监听
pullToList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉加载
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
if(Http.isBABoolean(getActivity())){
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
gsonj(s);
}
});
}
else{
Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
}
pullToList.onRefreshComplete();
}
//上拉刷新
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
if(Http.isBABoolean(getActivity())){
Http.httpAsynTask(str, new Http.CallBackString() {
@Override
public void getData(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
List<JsonBean.ResultBean> data2 = jsonBean.getResult();
data1.addAll(data2);
adter.notifyDataSetChanged();
pullToList.onRefreshComplete();
}
});
}
else{
Toast.makeText(getActivity(),"没网络",Toast.LENGTH_LONG).show();
}
pullToList.onRefreshComplete();
}
});
return view;
}
/*
* 加载节解析数据,设置适配器
* */
private void gsonj(String s) {
Gson gson = new Gson();
JsonBean jsonBean = gson.fromJson(s, JsonBean.class);
data1 = jsonBean.getResult();
//有数据就不添加
if(dao.query("pers", null, null, null, null, null, null).moveToFirst()){
}
else{
//没数据添加
for (JsonBean.ResultBean bean:data1){
ContentValues values = new ContentValues();
values.put("title",bean.getName());
values.put("thumbnail_pic_s",bean.getPic_s444());
dao.insert("pers",null,values);
}
}
//适配器
adter = new ListAdter(getActivity(), data1);
pullToList.setAdapter(adter);
}
}