使用PullToRefresh展示資料,側滑展示listview
阿新 • • 發佈:2019-01-12
1.先看我們的主頁面佈局,主頁面用qq頁面做
<?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.widget.DrawerLayout 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/frag" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></FrameLayout> <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:button="@null" android:gravity="center" android:padding="7dp" android:text="listview" /> <RadioButton android:id="@+id/radiobutton2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:button="@null" android:gravity="center" android:padding="7dp" android:text="gridview" /> </RadioGroup> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="left"> <ImageView android:id="@+id/imagetu" android:layout_width="150dp" android:layout_height="150dp" /> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> </android.support.v4.widget.DrawerLayout> </LinearLayout>
2.再來看主activity的程式碼
public class MainActivity extends BaseActivity { private RadioGroup radioGroup; private FragList fragList; private FragGrid fragGrid; private ImageView im; private String str = "http://www.xieast.com/api/news/news.php?page=4"; private String ss; private ListView listView; @Override protected int bindLayout() { return R.layout.activity_main; } @Override protected void initView() { listView = findViewById(R.id.listview); radioGroup = findViewById(R.id.radiogroup); im = findViewById(R.id.imagetu); ss = "http://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&u" + "rl=http%3A%2F%2Fimg5.duitang.com%2Fuploads%2Fitem%2F201410%2F05%2F20141005082835_2RTzn.t" + "humb.700_0.jpeg&thumburl=http%3A" + "%2F%2Fimg2.imgtn.bdimg.com%2Fit%2Fu%3D3846895839%2C2711067435%26fm%3D26%26gp%3D0.jpg"; radioGroup.check(radioGroup.getChildAt(0).getId()); ImageLoader.getInstance().displayImage(ss, im); } @Override protected void initData() { FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); fragList = new FragList(); fragGrid = new FragGrid(); transaction.add(R.id.frag, fragList); transaction.add(R.id.frag, fragGrid); transaction.hide(fragGrid).show(fragList); transaction.commit(); HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() { @Override public void getData(String s) { if (HttpUtil.isworkConnected(MainActivity.this)) { Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(s, JsonBean.class); List<JsonBean.DataBean> data = jsonBean.getData(); listView.setAdapter(new MyListAdadapter(MainActivity.this, data)); } } }); } @Override protected void bindEvent() { radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { FragmentTransaction ttt = getSupportFragmentManager().beginTransaction(); switch (checkedId) { case R.id.radiobutton1: ttt.hide(fragGrid).show(fragList); break; case R.id.radiobutton2: ttt.hide(fragList).show(fragGrid); break; } ttt.commit(); } }); } }
3.再來看pullToRefresh的程式碼,先判斷網路,沒有網路就解析本地資料,有網就通過介面解析網路資料,並新增資料庫。
public class FragList extends BaseFragment { private String str = "http://www.xieast.com/api/news/news.php?page=4"; private PullToRefreshListView pullToRefreshListView; private List<JsonBean.DataBean> data; private MyListAdadapter myListAdadapter; private Dao dao; @Override protected int bindLayout() { return R.layout.frag_list; } @Override protected void initView() { pullToRefreshListView = getActivity().findViewById(R.id.pull_lists); pullToRefreshListView.setMode(PullToRefreshBase.Mode.BOTH); pullToRefreshListView.setScrollingWhileRefreshingEnabled(true); dao = new Dao(getActivity()); } @Override protected void initData() { boolean b = HttpUtil.isworkConnected(getActivity()); if (b) { HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() { @Override public void getData(String s) { Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(s, JsonBean.class); data = jsonBean.getData(); if (dao.query("person", null, null, null, null, null, null).moveToFirst()) { } else { for (JsonBean.DataBean dataBean : data) { ContentValues values = new ContentValues(); values.put("name", dataBean.getAuthor_name()); values.put("img", dataBean.getThumbnail_pic_s()); dao.insert("person", null, values); } } myListAdadapter = new MyListAdadapter(getActivity(), data); pullToRefreshListView.setAdapter(myListAdadapter); } }); } else { List<JsonBean.DataBean> sdJson = getSDJson(); for (JsonBean.DataBean bean : sdJson) { ContentValues values = new ContentValues(); values.put("name", bean.getTitle()); values.put("img", bean.getThumbnail_pic_s()); dao.insert("person", null, values); } Cursor cursor = dao.query("person", null, null, null, null, null, null); data = new ArrayList<>(); if (cursor.moveToFirst()) { do { String name = cursor.getString(cursor.getColumnIndex("name")); String img = cursor.getString(cursor.getColumnIndex("img")); data.add(new JsonBean.DataBean(name, img)); } while (cursor.moveToNext()); } cursor.close(); Toast.makeText(getActivity(), "沒有網路", Toast.LENGTH_SHORT).show(); pullToRefreshListView.setAdapter(new MyListAdadapter(getActivity(), data)); } } private List<JsonBean.DataBean> getSDJson() { try { InputStream open = getActivity().getAssets().open("mmm.json"); BufferedReader reader = new BufferedReader(new InputStreamReader(open)); Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(reader, JsonBean.class); List<JsonBean.DataBean> data = jsonBean.getData(); return data; } catch (Exception e) { e.printStackTrace(); } return data; } @Override protected void bindEvent() { pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() { @Override public void getData(String s) { if (HttpUtil.isworkConnected(getActivity())) { Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(s, JsonBean.class); data = jsonBean.getData(); myListAdadapter = new MyListAdadapter(getActivity(), data); pullToRefreshListView.setAdapter(myListAdadapter); pullToRefreshListView.onRefreshComplete(); } } }); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { HttpUtil.httpAsyncTask(str, new HttpUtil.CallBacks() { @Override public void getData(String s) { if (HttpUtil.isworkConnected(getActivity())) { Gson gson = new Gson(); JsonBean jsonBean = gson.fromJson(s, JsonBean.class); List<JsonBean.DataBean> data1 = jsonBean.getData(); data.addAll(data1); myListAdadapter.notifyDataSetChanged(); pullToRefreshListView.onRefreshComplete(); } } }); } }); } }
4.接著看一下pullTorefresh的佈局
<?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">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull_lists"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
5.接下來寫介面卡,我兩個列表展示的資料是同一個資料,所以介面卡也共用了一個
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;
com.nostra13.universalimageloader.core.ImageLoader;
import java.util.List;
ic class MyListAdadapter extends BaseAdapter {
private Context context;
private List<JsonBean.DataBean> list;
public MyListAdadapter(Context context, List<JsonBean.DataBean> 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 3;
}
@Override
public int getItemViewType(int position) {
return position % 3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
switch (getItemViewType(position)) {
case 0:
ViewHolder1 holder1;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_one, null);
holder1 = new ViewHolder1();
holder1.view1 = convertView.findViewById(R.id.name1);
holder1.img1 = convertView.findViewById(R.id.image1);
convertView.setTag(holder1);
} else {
holder1 = (ViewHolder1) convertView.getTag();
}
holder1.view1.setText(list.get(position).getAuthor_name()+"");
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder1.img1);
break;
case 1:
ViewHolder2 holder2;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_two, null);
holder2 = new ViewHolder2();
holder2.view2 = convertView.findViewById(R.id.name2);
holder2.img2 = convertView.findViewById(R.id.image2);
convertView.setTag(holder2);
} else {
holder2 = (ViewHolder2) convertView.getTag();
}
holder2.view2.setText(list.get(position).getAuthor_name()+"");
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder2.img2);
break;
case 2:
ViewHolder3 holder3;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item_three, null);
holder3 = new ViewHolder3();
holder3.view3 = convertView.findViewById(R.id.name3);
holder3.img3 = convertView.findViewById(R.id.image3);
convertView.setTag(holder3);
} else {
holder3 = (ViewHolder3) convertView.getTag();
}
holder3.view3.setText(list.get(position).getAuthor_name()+"");
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(), holder3.img3);
break;
}
return convertView;
}
class ViewHolder1 {
TextView view1;
ImageView img1;
}
class ViewHolder2 {
TextView view2;
ImageView img2;
}
class ViewHolder3 {
TextView view3;
ImageView img3;
}
}