1.MainActivity
public class MainActivity extends BaseActivity {
int page=1;
private DrawerLayout dr;
private RadioGroup radioGroup;
private Frag01 frag01;
private Frag02 frag02;
private Frag03 frag03;
private FragmentManager manager;
private FragmentTransaction transaction;
private XlistView xlv;
@Override
protected int layoutResID() {
return R.layout.activity_main;
}
@Override
protected void initView() {
dr = findViewById(R.id.dr);
radioGroup = findViewById(R.id.radioGroup);
dr = findViewById(R.id.dr);
xlv = findViewById(R.id.xlv);
}
@Override
protected void initData() {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
frag01 = new Frag01();
frag02 = new Frag02();
frag03 = new Frag03();
transaction.add(R.id.frame,frag01);
transaction.add(R.id.frame,frag02);
transaction.add(R.id.frame,frag03);
transaction.show(frag01).hide(frag02).hide(frag03);
transaction.commit();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction qq = manager.beginTransaction();
switch (checkedId){
case R.id.radio0:
qq.show(frag01).hide(frag02).hide(frag03);
break;
case R.id.radio1:
qq.show(frag02).hide(frag01).hide(frag03);
break;
case R.id.radio2:
qq.show(frag03).hide(frag02).hide(frag01);
break;
}
qq.commit();
}
});
/*监听
dr.setDrawerListener(new DrawerLayout.DrawerListener() {
@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) {
}
});
*/
getAsyncTask();
}
private void getAsyncTask() {
MyAsyncTask task = new MyAsyncTask();
task.execute();
}
private class MyAsyncTask extends AsyncTask<String,Integer,String> {
String path="http://api.expoon.com/AppNews/getNewsList/type/1/p/"+page;
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
if(conn.getResponseCode()==200){
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len =0;
while ((len=inputStream.read(bytes))!=-1){
bos.write(bytes,0,len);
}
inputStream.close();
bos.close();
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
JSON fromJson = gson.fromJson(s, JSON.class);
ArrayList<Datas> data = fromJson.getData();
//适配器
xlv.setAdapter(new PullAdapter(MainActivity.this,data));
}
}
}
2.基类
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(layoutResID());
initView();
initData();
}
protected abstract void initData();
protected abstract void initView();
protected abstract int layoutResID();
}
public abstract class BaseFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = View.inflate(getActivity(),layoutResID(),null);
initView(view);
initData();
return view;
}
protected abstract void initView(View view);
protected abstract void initData();
protected abstract int layoutResID();
}
3.NetConnection
public class NetWork {
public static boolean isNetWork(Context context){
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if(info!=null){
return info.isAvailable();
}
return false;
}
}
4.自己写Bean类
5.Frag01
public class Frag01 extends BaseFragment {
private TabLayout tab;
private ViewPager pager;
private ArrayList<String> list = new ArrayList<>();
private Button btn;
@Override
protected int layoutResID() {
return R.layout.frag01;
}
@Override
protected void initView(View view) {
tab = view.findViewById(R.id.tab);
pager = view.findViewById(R.id.pager);
btn = view.findViewById(R.id.btn);
}
@Override
protected void initData() {
list.add("王八蛋");
list.add("关注");
list.add("推荐");
list.add("推荐地");
list.add("皇帝");
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
pager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) {
@Override
public int getCount() {
return list.size();
}
@Override
public Fragment getItem(int i) {
Fragments fragments = new Fragments();
return fragments;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return list.get(position);
}
});
//关联适配器
tab.setupWithViewPager(pager);
}
}
Fragments
public class Fragments extends BaseFragment {
private int page=1;
private PullToRefreshListView pull;
private Handler handler = new Handler();
private ArrayList<Datas> list;
@Override
protected int layoutResID() {
return R.layout.fragment;
}
@Override
protected void initView(View view) {
pull = view.findViewById(R.id.pull);
//设置模式
pull.setMode(PullToRefreshBase.Mode.BOTH);
// pull.setPullToRefreshEnabled(true);
}
@Override
protected void initData() {
final boolean netWork = NetWork.isNetWork(getActivity());
//设置监听
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
if(netWork){
page=1;
getDatas();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
pull.onRefreshComplete();
}
},2000);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
if(netWork){
page++;
getDatas();
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
pull.onRefreshComplete();
}
},2000);
}
});
//请求数据
if(netWork){
Toast.makeText(getActivity(),"有网",Toast.LENGTH_SHORT).show();
getDatas();
}else {
Toast.makeText(getActivity(),"无网",Toast.LENGTH_SHORT).show();
//查询数据库
SqlDao dao = new SqlDao(getActivity());
Cursor cursor = dao.query("lianxi", null, null, null, null, null, null);
//创建新集合
ArrayList<Datas> newData = new ArrayList<>();
//查询字段添加到数据库
if(cursor.moveToFirst()){
do {
String news_title = cursor.getString(cursor.getColumnIndex("news_title"));
String pic_url = cursor.getString(cursor.getColumnIndex("pic_url"));
newData.add(new Datas(news_title,pic_url));
}while (cursor.moveToNext());
}
Log.d("xxx",newData.toString());
cursor.close();
//适配器
pull.setAdapter(new PullAdapter(getActivity(),newData));
}
}
private void getDatas() {
MyAsyncTask task = new MyAsyncTask();
task.execute();
}
private class MyAsyncTask extends AsyncTask<String,Integer,String> {
String path="http://api.expoon.com/AppNews/getNewsList/type/1/p/"+page;
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setReadTimeout(5000);
if(conn.getResponseCode()==200){
InputStream inputStream = conn.getInputStream();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] bytes = new byte[1024];
int len =0;
while ((len=inputStream.read(bytes))!=-1){
bos.write(bytes,0,len);
}
inputStream.close();
bos.close();
String json = bos.toString();
return json;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
JSON fromJson = gson.fromJson(s, JSON.class);
ArrayList<Datas> data = fromJson.getData();
SqlDao sqlDao = new SqlDao(getActivity());
if(page==1){
list = new ArrayList<>();
sqlDao.delete("lianxi",null,null);
for (int i=0;i<data.size();i++){
ContentValues values = new ContentValues();
values.put("news_title",data.get(i).getNews_title());
values.put("pic_url",data.get(i).getPic_url());
sqlDao.insert("lianxi",null,values);
}
}
list.addAll(data);
//适配器
pull.setAdapter(new PullAdapter(getActivity(),list));
//显示新数据
pull.setSelection(list.size()-19);
}
}
}
6.适配器
public class PullAdapter extends BaseAdapter {
private Context context;
private ArrayList<Datas> list;
private final static int TYPE0=0;
private final static int TYPE1=1;
DisplayImageOptions options = new DisplayImageOptions.Builder()
.displayer(new RoundedBitmapDisplayer(20))
.showImageOnFail(R.mipmap.ic_launcher)
.cacheOnDisk(true)
.cacheInMemory(true)
.build();
public PullAdapter(Context context, ArrayList<Datas> 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) {
if(position%2==0){
return TYPE0;
}else {
return TYPE1;
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHodler1 viewHodler1=null;
ViewHodler2 viewHodler2=null;
int type = getItemViewType(position);
if(convertView==null){
if(type==TYPE0){
convertView=View.inflate(context, R.layout.item1,null);
viewHodler1=new ViewHodler1();
TextView text = convertView.findViewById(R.id.i_tv1);
viewHodler1.text1=text;
convertView.setTag(viewHodler1);
}else{
convertView=View.inflate(context, R.layout.item2,null);
TextView text = convertView.findViewById(R.id.i_tv2);
ImageView img = convertView.findViewById(R.id.i_iv22);
viewHodler2=new ViewHodler2();
viewHodler2.text=text;
viewHodler2.img=img;
convertView.setTag(viewHodler2);
}
}else{
if(type==TYPE0){
viewHodler1= (ViewHodler1) convertView.getTag();
}else{
viewHodler2= (ViewHodler2) convertView.getTag();
}
}
if(type==TYPE0){
viewHodler1.text1.setText(list.get(position).getNews_title());
}else{
viewHodler2.text.setText(list.get(position).getNews_title());
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHodler2.img,options);
}
/* if(type==TYPE1){
viewHodler1.text1.setText(list.get(position).getNews_title());
}else{
viewHodler2.text.setText(list.get(position).getNews_title());
ImageLoader.getInstance().displayImage(list.get(position).getPic_url(),viewHodler2.img,options);
}
*/
return convertView;
}
class ViewHodler1{
private TextView text1;
}
class ViewHodler2{
private TextView text;
private ImageView img;
}
}
7.Application
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
File file = StorageUtils.getCacheDirectory(this);
ImageLoaderConfiguration imageLoaderConfiguration = new ImageLoaderConfiguration.Builder(this)
.diskCache(new UnlimitedDiskCache(file))
.memoryCache(new LruMemoryCache(2*1024*1024))
.build();
ImageLoader.getInstance().init(imageLoaderConfiguration);
}
}
8.SQL
public class Sqlite extends SQLiteOpenHelper {
public Sqlite(Context context) {
super(context, "bw.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table lianxi(id Integer primary key autoincrement,news_title Text,pic_url Text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
public class SqlDao {
private final SQLiteDatabase db;
public SqlDao(Context context){
Sqlite sqlite = new Sqlite(context);
db = sqlite.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);
}
//删除
public long delete(String table, String whereClause, String[] whereArgs){
return db.delete(table, whereClause, whereArgs);
}
}
9.布局
activity_main
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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.support.v4.widget.DrawerLayout
android:id="@+id/dr"
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/frame"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"></FrameLayout>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio0"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:background="@drawable/btn_selector"
android:text="首页" />
<RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:background="@drawable/btn_selector"
android:text="首页2" />
<RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/btn_selector"
android:layout_weight="1"
android:button="@null"
android:text="首页3" />
</RadioGroup>
</LinearLayout>
<FrameLayout
android:background="#f00"
android:layout_width="300dp"
android:layout_height="match_parent"
android:layout_gravity="start">
<com.na.xlistview.XlistView
android:id="@+id/xlv"
android:layout_width="match_parent"
android:layout_height="wrap_content"></com.na.xlistview.XlistView>
</FrameLayout>
</android.support.v4.widget.DrawerLayout>
</android.support.constraint.ConstraintLayout>```
Frag01
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.TabLayout
android:id="@+id/tab"
android:layout_weight=“1”
android:layout_width=“match_parent”
android:layout_height=“50dp”>
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
```
fragment
扫描二维码关注公众号,回复:
4990501 查看本文章
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.handmark.pulltorefresh.library.PullToRefreshListView
android:id="@+id/pull"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
item
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<TextView
android:id="@+id/i_tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aa"
android:textSize="25sp"
/>
</LinearLayout>
item2
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/i_tv2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="aa"
android:textSize="25sp"
/>
<ImageView
android:id="@+id/i_iv22"
android:layout_width="100dp"
android:layout_height="120dp"
android:src="@mipmap/ic_launcher" />
</LinearLayout>