QQ页面切换+Fragment嵌套+Tablayout+PullToRefreshListView+数据库

第一步
首先我们要先写好布局页面

   <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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值