第一步
首先我们要先写好布局页面
<FrameLayout
android:id="@+id/frag"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="9"
></FrameLayout>
<RadioGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal"
>
<RadioButton
android:id="@+id/radio0"
android:button="@null"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="我的"
/>
<RadioButton
android:id="@+id/radio1"
android:button="@null"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="我的"
/>
<RadioButton
android:id="@+id/radio2"
android:button="@null"
android:gravity="center"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:text="我的"
/>
</RadioGroup>
第二步
接下来就该我们的Activity页面来实现我们的QQ页面切换
这里我们使用的是静态添加,和show和hide来进行页面切换
public class MainActivity extends AppCompatActivity {
private RadioGroup group;
private FrameLayout frag;
ArrayList<Fragment> list = new ArrayList<Fragment>();
private FragmentManager supportFragmentManager;
private Fragment01 fragment01;
private Fragment02 fragment02;
private Fragment03 fragment03;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
group = (RadioGroup)findViewById(R.id.group);
frag = (FrameLayout)findViewById(R.id.frag);
fragment01 = new Fragment01();
fragment02 = new Fragment02();
fragment03 = new Fragment03();
supportFragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = supportFragmentManager.beginTransaction();
transaction.add(R.id.frag, fragment01);
transaction.add(R.id.frag, fragment02);
transaction.add(R.id.frag, fragment03);
transaction.show(fragment01).hide(fragment02).hide(fragment03).commit();
group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
FragmentTransaction transaction1 = supportFragmentManager.beginTransaction();
switch (checkedId){
case R.id.radio0:
transaction1.show(fragment01).hide(fragment02).hide(fragment03).commit();
break;
case R.id.radio1:
transaction1.show(fragment02).hide(fragment01).hide(fragment03).commit();
break;
case R.id.radio2:
transaction1.show(fragment03).hide(fragment02).hide(fragment01).commit();
break;
}
}
});
}
}
第三步
接下来我们要实现的就是使用Tablayout和XlistView来实现导航栏和上下拉刷新也就是Fragment的第一个页面
导航栏这里我们是使用自行添加,也可以使用数据来添加
实现这些功能我们需要进行导入依赖
tablayout的依赖 compile ‘com.android.support:design:26+’
public class Fragment01 extends Fragment {
private ViewPager pager;
private TabLayout tablayout;
ArrayList<Fragment> list = new ArrayList<Fragment>();
ArrayList<String> titlelist = new ArrayList<String>();
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment01,container,false);
pager = (ViewPager)view.findViewById(R.id.pager1);
tablayout = (TabLayout)view.findViewById(R.id.tabMode);
for (int i = 0 ;i<3;i++){
titlelist.add("爱因斯坦"+i);
};
list.add(new Fragment001());
list.add(new Fragment002());
list.add(new Fragment003());
MyAdapter myAdapter = new MyAdapter(getChildFragmentManager());
pager.setAdapter(myAdapter);
tablayout.setTabMode(TabLayout.MODE_FIXED);
tablayout.setupWithViewPager(pager);
return view;
}
private class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int i) {
return list.get(i);
}
@Override
public int getCount() {
return list.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return titlelist.get(position);
}
}
}
第四个功能就是我们的Gson串的解析和 pull-to-refresh数据优化上下拉加载和刷新还有判断网络和数据库
这里我们使用的是Handler
pull-to-refresh上下拉刷新控件 compile ‘com.github.userswlwork:pull-to-refresh:1.0.0’
public class Fragment001 extends Fragment {
String baseUrl = "http://api.tianapi.com/meinv/?key=3304a8bc9414f97e30928b80163cf098&num=1";
private PullToRefreshListView pth;
ArrayList<Bean.NewslistBean> list = new ArrayList<>();
private MyAdapter myAdapter;
private Dao dao;
int page;
String zong;
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 0:
Gson gson = new Gson();
String json = (String)msg.obj;
Bean bean = gson.fromJson(json, Bean.class);
List<Bean.NewslistBean> newslist = bean.getNewslist();
list.addAll(newslist);
for (int i = 0;i<list.size();i++){
ContentValues values = new ContentValues();
values.put("time",list.get(i).getCtime());
dao.insert("student",null,values);
}
myAdapter.notifyDataSetChanged();
pth.onRefreshComplete(); // 让刷新头和刷新底部返回
break;
}
}
};
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment001,container,false);
dao = new Dao(getActivity());
pth = (PullToRefreshListView)view.findViewById(R.id.pth);
pth.setMode(PullToRefreshBase.Mode.BOTH);
myAdapter = new MyAdapter(getActivity(), list);
pth.setAdapter(myAdapter);
getData(page);
return view;
}
private void getData(int page){
zong = (baseUrl+page);
intitData();
}
private void intitData() {
if(Netutil.isconn(getActivity())){
pth.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
page = 0;
list.clear();
getData(page);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> pullToRefreshBase) {
page++;
getData(page);
}
});
new Thread(){
@Override
public void run() {
super.run();
String netjson = NetWordUtils.getNetjson(zong);
Message message = handler.obtainMessage();
message.obj = netjson;
message.what = 0;
handler.sendMessage(message);
}
}.start();
}else{
Cursor student = dao.query("student", null, null, null, null, null, null);
if(student.moveToFirst()){
do {
String time = student.getString(student.getColumnIndex("time"));
Toast.makeText(getActivity(),"我是数据"+time,Toast.LENGTH_LONG).show();
}while (student.moveToNext());
}
student.close();
}
}
}
最后的就是我们的一些数据库和适配器的代码
这个是我们自己写的网络判断工具类
public class Netutil {
public static boolean isconn(Context context){
boolean isf = false;
ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (networkInfo!=null){
isf=true;
}
return isf;
}
}
Dao层数据库
public class Dao {
private final SQLiteDatabase db;
private Context context;
public Dao(Context context) {
MySqlist mySqlist = new MySqlist(context);
db = mySqlist.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 class MySqlist extends SQLiteOpenHelper {
public MySqlist(Context context) {
super(context,"bwie.db",null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table student(id integer primary key autoinCrement,time text)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
这个是ImageLoader全局化配置
需要我们导入Imageloader的图片依赖
需要我们在清单文件进行注册
imageloader
compile ‘com.nostra13.universalimageloader:universal-image-loader:1.9.5’
public class Mapp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration build = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader instance = ImageLoader.getInstance();
instance.init(build);
}
}
这个是我们的适配器
public class MyAdapter extends BaseAdapter {
private Context context;
private ArrayList<Bean.NewslistBean> list;
public MyAdapter( Context context, ArrayList<Bean.NewslistBean> list) {
this.context = context;
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if(convertView == null){
convertView = View.inflate(context,R.layout.item,null);
holder = new ViewHolder();
holder.text = convertView.findViewById(R.id.text);
holder.imageView = convertView.findViewById(R.id.image);
convertView.setTag(holder);
}else{
holder = (ViewHolder) convertView.getTag();
}
ImageLoader instance = ImageLoader.getInstance();
instance.displayImage(list.get(position).getPicUrl(),holder.imageView);
holder.text.setText(list.get(position).getCtime());
return convertView;
}
class ViewHolder{
TextView text;
ImageView imageView;
}
}