Toolbar、TabLayout、ViewPager(Json解析版)
来源:互联网 发布:古希腊神话 知乎 编辑:程序博客网 时间:2024/05/20 05:23
布局
// 开权限 <uses-permission android:name="android.permission.INTERNET" /><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="com.example.lenovo.month08_test_health.MainActivity"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:actionBarSize" android:background="#82d844" /> <android.support.design.widget.TabLayout android:id="@+id/tab_layou" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" app:tabIndicatorColor="#82d844" app:tabMode="scrollable" app:tabSelectedTextColor="#82d844" app:tabTextColor="#000" /> <View android:layout_width="match_parent" android:layout_height="1dp" android:background="#bebcbc" /> <android.support.v4.view.ViewPager android:id="@+id/view_pager" android:layout_width="match_parent" android:layout_height="match_parent" /></LinearLayout>
Activity
import android.graphics.Color;import android.os.Handler;import android.os.Message;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.support.v7.widget.Toolbar;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private Toolbar toolbar; private TabLayout tabLayout; private ViewPager viewPager; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); switch (msg.what) { case Path.DOWNLOADSUCCESS: initViews(msg); break; case Path.DOWNLOADFAILED: break; } } }; private void initViews(Message msg) { List<Fragment> fragments = new ArrayList<>(); List<ClassifyBean> beanList = (List<ClassifyBean>) msg.obj; for (int i = 0; i < beanList.size(); i++) { ClassifyBean bean = beanList.get(i); fragments.add(BeanFragment.getBundle(bean.getId())); } BeanAdapter adapter = new BeanAdapter(getSupportFragmentManager(), beanList, fragments); viewPager.setAdapter(adapter); // 对应的内容显示到TabLayout上 tabLayout.setupWithViewPager(viewPager); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { // 自己建立工具栏 toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setTitle("健康资讯"); toolbar.setTitleTextColor(Color.BLUE); setSupportActionBar(toolbar); tabLayout = (TabLayout) findViewById(R.id.tab_layou); viewPager = (ViewPager) findViewById(R.id.view_pager); initView(); } private void initView() { new Thread(new Runnable() { @Override public void run() { // 传入网址进行解析 String json = HttpUtil.getHttp(Path.CLASSFYURL); if (json != null && !"".equals(json)) { List<ClassifyBean> beanList = JsonUtil.getJsonClassify(json); Message msg = handler.obtainMessage(); msg.what = Path.DOWNLOADSUCCESS; msg.obj = beanList; handler.sendMessage(msg); } } }).start(); }}
HTTP与JSON解析
// 此块都没什么太多注释,上篇有些说明public class HttpUtil { public static String getHttp(String jsonUrl) { HttpURLConnection conn = null; BufferedReader reader = null; StringBuffer buffer = new StringBuffer(); try { URL url = new URL(jsonUrl); conn = (HttpURLConnection) url.openConnection(); conn.setConnectTimeout(5000); conn.connect(); if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) { reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String result; while ((result = reader.readLine()) != null) { buffer.append(result); } return buffer.toString(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if (conn != null){ conn.disconnect(); } if (reader != null){ try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; }}
public class JsonUtil { public static List<ClassifyBean> getJsonClassify(String json) { List<ClassifyBean> bean = new ArrayList<>(); try { JSONObject jo = new JSONObject(json); JSONArray tngou = jo.getJSONArray("tngou"); for (int i = 0; i < tngou.length(); i++) { JSONObject data = tngou.getJSONObject(i); String description = data.getString("description"); String keywords = data.getString("keywords"); String name = data.getString("name"); String title = data.getString("title"); int foodclass = data.getInt("foodclass"); int id = data.getInt("id"); int seq = data.getInt("seq"); ClassifyBean classifyBean = new ClassifyBean(description, foodclass, id, keywords, name, seq, title); bean.add(classifyBean); } } catch (JSONException e) { e.printStackTrace(); } return bean; }}
FragmentPagerAdapter
// FragmentPagerAdapter 来处理多 Fragment 页面的横向滑动。// 结合 ViewPager 使用public class BeanAdapter extends FragmentPagerAdapter { private List<ClassifyBean> beanList; private List<Fragment> fragments; public BeanAdapter(FragmentManager fm, List<ClassifyBean> beanList, List<Fragment> fragments) { super(fm); this.beanList = beanList; this.fragments = fragments; } @Override public Fragment getItem(int position) { return fragments.get(position); } @Override public int getCount() { return fragments.size(); } @Override public CharSequence getPageTitle(int position) { // 显示在TabLayout 上的内容,我们只要name信息 return beanList.get(position).getName(); }}
Fragement
public class BeanFragment extends Fragment { // 定义回调方法 public static BeanFragment getBundle(int id) { BeanFragment fragment = new BeanFragment(); Bundle bundle = new Bundle(); bundle.putInt("id", id); // 传入参数 fragment.setArguments(bundle); return fragment; } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { // 获取参数 Bundle bundle = getArguments(); int id = bundle.getInt("id"); TextView tv = new TextView(getActivity()); tv.setText(id + ""); return tv; }}
FragmentStatePagerAdapter和FragmentPagerAdapter 区别
【FragmentPagerAdapter】
FragmentPagerAdapter 继承自 PagerAdapter。相比通用的 PagerAdapter,该类更专注于每一页均为 Fragment 的情况。如文档所述,该类内的每一个生成的 Fragment 都将保存在内存之中,因此适用于那些相对静态的页,数量也比较少的那种;如果需要处理有很多页,并且数据动态性较大、占用内存较多的情况,应该使用FragmentStatePagerAdapter。FragmentPagerAdapter 重载实现了几个必须的函数,因此来自 PagerAdapter 的函数,我们只需要实现 getCount(),即可。且,由于 FragmentPagerAdapter.instantiateItem() 的实现中,调用了一个新增的虚函数 getItem(),因此,我们还至少需要实现一个 getItem()。因此,总体上来说,相对于继承自 PagerAdapter,更方便一些。
【FragmentStatePagerAdapter】
FragmentStatePagerAdapter 和前面的 FragmentPagerAdapter 一样,是继承子 PagerAdapter。但是,和 FragmentPagerAdapter 不一样的是,正如其类名中的 ‘State’ 所表明的含义一样,该 PagerAdapter 的实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源;而在页面需要显示时,生成新的页面(就像 ListView 的实现一样)。这么实现的好处就是当拥有大量的页面时,不必在内存中占用大量的内存。
- Toolbar、TabLayout、ViewPager(Json解析版)
- Toolbar TabLayout ViewPager
- NavigationView+ToolBar+TabLayout+ViewPager+Fragment综合使用
- TabLayout+ViewPager(1)
- drawerlayout+(viewpager+tablayout)
- TabLayout和ViewPager(一)
- TabLayout和ViewPager(二)
- TabLayout+ViewPager+Fragment(代码)
- 项目解析一:仿csdn 代码解析(TabLayout,Viewpager,FragmentPagerAdapter)
- ViewPager+TabLayout
- Viewpager+Tablayout
- TabLayout+ViewPager
- TabLayout+ViewPager
- TabLayout+viewPager
- ViewPager+TabLayout
- Tablayout+viewpager
- TabLayout +ViewPager
- tablayout+viewpager
- Android_ListView图片下载三级缓存处理
- 第四天(6道)
- pdf 免费 转 word
- 一.docker安装与部署
- 圣剑传说 玛娜传奇(Legend of Mana)(LOM)AF推荐放置
- Toolbar、TabLayout、ViewPager(Json解析版)
- Application onCreate函数多次被调用
- ngx_slab_pool
- JAVA NIO之浅谈内存映射文件原理与DirectMemory
- 初步体验微信后台开发
- 使用webpack打包Vue工程
- 火车票购票问题2
- HDU1157 POJ2338 Who's in the Middle
- orcale 包,包体,函数,游标.(未完)