一.首先创建三个Fragment******************
二.maintivity中用viewpager中存入Fragment*******************
package com.example.day4.ui.activity;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.design.widget.BottomNavigationView;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import com.example.day4.ui.fragment.BlankFragment;
import com.example.day4.ui.fragment.HomeFragment;
import com.example.day4.R;
public class Main2Activity extends AppCompatActivity {
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
pager.setCurrentItem(0);
return true;
case R.id.navigation_video:
pager.setCurrentItem(1);
return true;
case R.id.navigation_mine:
pager.setCurrentItem(2);
return true;
}
return false;
}
};
private BottomNavigationView navigation;
private ViewPager pager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
pager = findViewById(R.id.pagers);
pager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return new HomeFragment();
case 1:
return new BlankFragment();
case 2:
return new BlankFragment();
}
return null;
}
@Override
public int getCount() {
return 3;
}
});
navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {//页面滑动的时候回调
}
@Override
public void onPageSelected(int i) {//页面选中时回调
switch (i) {
case 0:
navigation.setSelectedItemId(R.id.navigation_home);
break;
case 1:
navigation.setSelectedItemId(R.id.navigation_video);
break;
case 2:
navigation.setSelectedItemId(R.id.navigation_mine);
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {//页面状态改变
}
});
}
}
三.Listview 适配器*****************************
package com.example.day4.ui.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import com.example.day4.R;
import com.example.day4.model.NewsResponse;
import java.util.ArrayList;
import java.util.List;
public class NewsAdapter extends BaseAdapter {
private Context context;
private List<NewsResponse.Data> datas;
public NewsAdapter(Context context) {
this.context = context;
datas = new ArrayList<>();
}
public void setDatas(List<NewsResponse.Data> datas) {
//this.datas.clear();
this.datas.addAll(datas);
notifyDataSetChanged();
}
public void delData(int position) {
datas.remove(position);
notifyDataSetChanged();
}
public void addData(NewsResponse.Data data) {
datas.add(data);
notifyDataSetChanged();
}
@Override
public int getCount() {
return datas.size();
}
@Override
public NewsResponse.Data getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
viewHolder = new ViewHolder(convertView);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.bindData(getItem(position));
return convertView;
}
class ViewHolder {
TextView title;
TextView summary;
public ViewHolder(View itemView) {
title = itemView.findViewById(R.id.title);
summary = itemView.findViewById(R.id.summary);
itemView.setTag(this);
}
public void bindData(NewsResponse.Data data) {
title.setText(data.getNews_title());
summary.setText(data.getNews_summary());
}
}
}
四.在第一个Fragment中Listview展示***********************
package com.example.day4.ui.fragment;
import android.annotation.SuppressLint;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import com.example.day4.R;
import com.example.day4.db.NewsDao;
import com.example.day4.model.NewsResponse;
import com.example.day4.ui.adapter.NewsAdapter;
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;
import static android.provider.ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE;
public class HomeFragment extends Fragment {
private ListView news;
private NewsAdapter adapter;
private NewsDao newsDa o;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
newsDao = new NewsDao(getActivity());
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_home, container, false);
}
private String apiUrl = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
news = view.findViewById(R.id.news);
adapter = new NewsAdapter(getActivity());
news.setAdapter(adapter);
news.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
newsDao.del(adapter.getItem(position).getNews_id());
adapter.delData(position);
return true;
}
});
initData();
}
@SuppressLint("StaticFieldLeak")
private void initData() {
if(!hasNetwork()) {
List<NewsResponse.Data> result = newsDao.query();
adapter.setDatas(result);
return ;
}
//集合更好。
new AsyncTask<String, Void, List<NewsResponse.Data>>() {
@Override
protected List<NewsResponse.Data> doInBackground(String... strings) {//
NewsResponse result = null;
try {
URL url = new URL(strings[0]);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
if (isMobileNetwork()) {
urlConnection.setConnectTimeout(15000);
urlConnection.setReadTimeout(15000);
} else {
urlConnection.setConnectTimeout(5000);
urlConnection.setReadTimeout(5000);
}
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
String strResult = stream2String(urlConnection.getInputStream());
result = new Gson().fromJson(strResult, NewsResponse.class);
}
} catch (Exception e) {
e.printStackTrace();
}
//网络请求成功,解析成功,服务端返回成功
if(result != null && result.isSuccess()) {
newsDao.addAll(result.getData());
return result.getData();
}
return null;
}
@Override
protected void onPostExecute(List<NewsResponse.Data> data) {
if(data != null) {
adapter.setDatas(data);
} else {
Toast.makeText(getActivity(), "请求失败", Toast.LENGTH_SHORT).show();
}
}
}.execute(apiUrl);
}
//是否是手机网络
private boolean isMobileNetwork() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.getType() == TYPE_MOBILE;
}
private boolean hasNetwork() {
ConnectivityManager cm = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = cm.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isAvailable();
}
private String stream2String(InputStream inputStream) throws IOException {
StringBuilder stringBuilder = new StringBuilder();
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader br = new BufferedReader(isr);
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()) {
stringBuilder.append(tmp);
}
return stringBuilder.toString();
}
}
***********创建数据库
package com.example.day4.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
private static final String DB_NAME = "news.db";
private static final int DB_VERSION = 1;
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE news (_id INTEGER PRIMARY KEY AUTOINCREMENT," +
"title TEXT," +
"summary TEXT," +
"id TEXT UNIQUE)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
**********数据库dao层
package com.example.day4.db;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.example.day4.model.NewsResponse;
import java.util.ArrayList;
import java.util.List;
public class NewsDao {
private SQLiteDatabase db;
public NewsDao(Context context) {
db = new DBHelper(context).getWritableDatabase();
}
public List<NewsResponse.Data> query() {
List<NewsResponse.Data> result = new ArrayList<>();
Cursor cursor = db.query("news",
null, null, null, null, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String id = cursor.getString(cursor.getColumnIndex("id"));
String title = cursor.getString(cursor.getColumnIndex("title"));
String summary = cursor.getString(cursor.getColumnIndex("summary"));
result.add(new NewsResponse.Data(id, title, summary));
}
cursor.close();
}
return result;
}
public void add(NewsResponse.Data data) {
ContentValues values = new ContentValues();
values.put("id", data.getNews_id());
values.put("title", data.getNews_title());
values.put("summary", data.getNews_summary());
db.insert("news", null, values);
}
public void addAll(List<NewsResponse.Data> datas) {
for (NewsResponse.Data data : datas) {
add(data);
}
}
public void del(String id) {
db.delete("news", "id=?", new String[]{id});
}
}