手机助手(二):侧拉栏drawerLayout+Tab+Viewpager+ListView+Pulltorefresh+imageloder

本文主要是介绍手机助手(二):侧拉栏drawerLayout+Tab+Viewpager+ListView+Pulltorefresh+imageloder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

简介

完成侧拉栏的显示,侧拉首页对应的:首页+应用+游戏这3个 tab,包含的知识点有:请求数据 +pullTofresh + ImageLoader +轮播图 + listView

效果图:

侧拉栏的实现

V4包中的DrawerLayout实现侧拉效果,每个侧拉的item对应一个fragment,点击该item时,先把所有的fragment隐藏 + 文字设置未选中,然后才创建对应的fragment并显示

怎么实现侧拉栏的显示与隐藏?

点击ActionBar的导航图标实现侧拉栏的显示与隐藏。先要获取ActionBar和DrawerLayout,再创建ActionBarDrawerToggle并设置导航图标,最后给drawerlayout添加侧栏监听及toggle,当然要想侧栏栏出现,还要在onOptionsItemSelected()方法中加这一行代码:toggle.onOptionsItemSelected(item);

private void initDrawerLayout() {drawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout);// 创建监听对(ActionBarDrawerToggle 实现了DrawerLayout.DrawerListener),添加导航图标toggle = new ActionBarDrawerToggle(this, drawerLayout, R.drawable.ic_drawer_am, 0, 0);toggle.syncState();// 少了这一行,ic_drawer_am就是默认的图标,不是我们指定的。drawerLayout.setDrawerListener(toggle);
}/*** 要想侧栏栏出现,还要加这一行代码:toggle.onOptionsItemSelected(item);*/
@Override
public boolean onOptionsItemSelected(MenuItem item) {toggle.onOptionsItemSelected(item);return super.onOptionsItemSelected(item);
}

ActionBar的设置

private void initActionBar() {ActionBar actionBar = getSupportActionBar();actionBar.setIcon(R.drawable.ic_launcher);// 设置home图标actionBar.setDisplayShowHomeEnabled(true);// 显示home图标actionBar.setHomeButtonEnabled(true);// home图标可点击actionBar.setDisplayHomeAsUpEnabled(true);// 显示导航图标
}

侧栏按的item点击

@Override
public void onClick(View v) {setAllFalse();transaction = fm.beginTransaction();hideAllFragment();// 先创建FragmentTransaction对象,在隐藏switch (v.getId()) {case R.id.home_layout:tv_home.setSelected(true);if (homeFrag == null) {homeFrag = new HomeFragment();transaction.add(R.id.frame_home, homeFrag, "HomeFragment");}transaction.show(homeFrag);break;case R.id.setting_layout:tv_setting.setSelected(true);if (setFrag == null) {setFrag = new SettingFragment();transaction.add(R.id.frame_home, setFrag, "SettingFragment");}transaction.show(setFrag);break;}drawerLayout.closeDrawers();transaction.commit();
}

先用listview显示数据,在添加pullTofresh+ imageloader,然后添加轮播图

HomeFrag:listView显示数据

注意:更新ui需要再主线程,所以CommonUtil.runOnUIThread(…)

HomeFrag

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {contentPager = new ContentPager(getActivity()) {@Overridepublic Object requestData() {return getData();}@Overridepublic View createSuccessView() {return getSuccessView();}};return contentPager;
}protected View getSuccessView() {view = View.inflate(getActivity(), R.layout.frag_home, null);listView = (ListView) view.findViewById(R.id.listView);adapter = new HomeFragAdapter(appsList);listView.setAdapter(adapter);return view;
}protected Object getData() {String json = HttpHelper.get(NetUrl.GAME +appsList.size());List<AppInfoBean> list = (List<AppInfoBean>) GsonUtil.jsonToList(json, new TypeToken<List<AppInfoBean>>() {}.getType());addAndRefreshData(list);return list;
}private void addAndRefreshData(List<AppInfoBean> list) {appsList.addAll(list);CommonUtil.runOnUIThread(new Runnable() {@Overridepublic void run() {adapter.notifyDataSetChanged();}});
}

HomeFragAdapter:

格式化app的大小:包:String android.text.format: 方法: Formatter.formatFileSize(Context context, long number)

public class HomeFragAdapter extends MyBaseAdapter<AppInfoBean> {public HomeFragAdapter(List<AppInfoBean> list) {super(list);}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = View.inflate(parent.getContext(), R.layout.item_home_frag, null);holder = new ViewHolder(convertView);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}AppInfoBean info = list.get(position);ImageLoader.getInstance().displayImage(NetUrl.IMAGE_PREFIX + info.getIconUrl(), holder.iv, ImageLoaderOptions.options);holder.tv_name.setText(info.getName());holder.tv_size.setText("" + Formatter.formatFileSize(MyApplication.getContext(), info.getSize()));holder.tv_desc.setText(info.getDes());holder.ratingBar.setRating(info.getStars());return convertView;}public class ViewHolder {public ImageView iv;public RatingBar ratingBar;public TextView tv_name;public TextView tv_size;public TextView tv_desc;public ViewHolder(View itemView) {super();iv = (ImageView) itemView.findViewById(R.id.iv_item_frag_home);ratingBar = (RatingBar) itemView.findViewById(R.id.ratingBar);tv_name = (TextView) itemView.findViewById(R.id.tv_name_frag_home);tv_size = (TextView) itemView.findViewById(R.id.tv_app_size_frag_home);tv_desc = (TextView) itemView.findViewById(R.id.tv_app_desc_frag_home);}}
}

添加刷新 pulltorefresh

参考:第三方开源库:Android-PullToRefresh-master简单使用

protected View getSuccessView() {view = View.inflate(getActivity(), R.layout.frag_home, null);ptr = (PullToRefreshListView) view.findViewById(R.id.pull_refresh_list);ptr.setMode(Mode.BOTH);ptr.setOnRefreshListener(new OnRefreshListener<ListView>() {@Overridepublic void onRefresh(PullToRefreshBase<ListView> refreshView) {if (refreshView.getCurrentMode() == Mode.PULL_FROM_START) {// 下拉刷新handler.sendEmptyMessageDelayed(WHAT1, 1500);} else {// 上拉加载更多// handler.sendEmptyMessageDelayed(WHAT2, 1500);//模拟上拉加载更多contentPager.loadDataAndRefresh();}}});listView = ptr.getRefreshableView();adapter = new HomeFragAdapter(appsList);listView.setAdapter(adapter);return view;
}

imageloader

第三方开源库:imageLoader的使用

先要在application中初始化,在设置DisplayImageOptions,然后根据url显示图片

ImageLoader.getInstance().displayImage(NetUrl.IMAGE_PREFIX + info.getIconUrl(), holder.iv, ImageLoaderOptions.options);

轮播图

private void initBanner() {findHeadViews();initPictDescList();initDots();initViewPager();
}private void initViewPager() {BannerPagerAdapter adapter = new BannerPagerAdapter(pictUrlList);viewPager.setAdapter(adapter);listView.addHeaderView(headView);tv_desc.setText("第一张图");tv_ratio.setText(1 + "/" + pictUrlList.size());viewPager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {tv_desc.setText(pictDescList.get(position));tv_ratio.setText(1 + position + "/" + pictUrlList.size());for (int i = 0; i < dotsList.size(); i++) {if (i == position) {dotsList.get(i).setBackgroundResource(R.drawable.dot_focus);} else {dotsList.get(i).setBackgroundResource(R.drawable.dot_normal);}}}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});
}private void findHeadViews() {headView = View.inflate(MyApplication.getContext(), R.layout.layout_banner, null);viewPager = (ViewPager) headView.findViewById(R.id.viewpager_banner);tv_desc = (TextView) headView.findViewById(R.id.tv_desc_banner);tv_ratio = (TextView) headView.findViewById(R.id.tv_ratio_banner);ll_dots = (LinearLayout) headView.findViewById(R.id.ll_dots);
}private void initDots() {ll_dots.removeAllViews();dotsList.clear();LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10);for (int i = 0; i < pictUrlList.size(); i++) {TextView tv = new TextView(getActivity());if (i == 0) {tv.setBackgroundResource(R.drawable.dot_focus);} else {tv.setBackgroundResource(R.drawable.dot_normal);}params.setMargins(10, 0, 0, 0);ll_dots.addView(tv, params);dotsList.add(tv);}
}private void initPictDescList() {for (int i = 0; i < pictUrlList.size(); i++) {pictDescList.add("第" + (i + 1) + "张图");}
}

RatingBar

<RatingBarandroid:id="@+id/ratingBar"style="@android:style/Widget.RatingBar"android:layout_width="wrap_content"android:layout_height="14dp"android:layout_marginBottom="2dp"android:layout_marginTop="2dp"android:isIndicator="true"android:progressDrawable="@drawable/ratingbar_drawable" />

ratingbar_drawable.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+android:id/background" android:drawable="@drawable/rating_small_empty" /><item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/rating_small_half" /><item android:id="@+android:id/progress" android:drawable="@drawable/rating_small_full" />
</layer-list>

源码

https://git.oschina.net/googlepalycqc/GooglePlayCQCDay02

这篇关于手机助手(二):侧拉栏drawerLayout+Tab+Viewpager+ListView+Pulltorefresh+imageloder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654827

相关文章

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

ASIO网络调试助手之一:简介

多年前,写过几篇《Boost.Asio C++网络编程》的学习文章,一直没机会实践。最近项目中用到了Asio,于是抽空写了个网络调试助手。 开发环境: Win10 Qt5.12.6 + Asio(standalone) + spdlog 支持协议: UDP + TCP Client + TCP Server 独立的Asio(http://www.think-async.com)只包含了头文件,不依

cell phone teardown 手机拆卸

tweezer 镊子 screwdriver 螺丝刀 opening tool 开口工具 repair 修理 battery 电池 rear panel 后盖 front and rear cameras 前后摄像头 volume button board 音量键线路板 headphone jack 耳机孔 a cracked screen 破裂屏 otherwise non-functiona

好用的AI编程助手MarsCode[豆包]

欢迎来到 Marscode 的世界!这里将为你揭秘 Marscode,它的独特之处、应用领域等相关精彩内容等你来探索。 一、打开VS Code 二、选择 Extensions,搜索marscode 三、点击安装 四、点击使用 五、输入需要编写的代码 六、根据自己的需求修改代码 MarsCode 注册

想要从OPPO手机恢复数据?免费OPPO照片视频恢复软件

此实用程序可帮助那些寻找以下内容的用户: 在OPPO手机中格式化存储卡后可以恢复图片吗?我删除了 OPPO上的视频和图片,我感觉很糟糕,因为里面有我在拉斯维加斯拍摄的视频和照片 免费OPPO照片视频恢复软件 您能恢复OPPO上已删除的照片吗?我不小心格式化了OPPO SD 卡,有希望恢复已删除的照片吗? 救命!我在清理时删除了我的照片,我的问题是是否有任何免费软件可以从OPPO中恢复已

Android ToolBar+DrawerLayout的实现

实现思路: 1.关联相应的依赖包 compile ‘com.android.support:appcompat-v7:25.3.1’ 2.主布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"

ViewPager+fragment实现切换页面(一)

如今的很多应用中都是下面有一排按钮,点击可以切换页面,滑动也可以切换页面。下面就来简单的实现这个功能。 思路 首先肯定是会用到viewpager这个控件,为了能够向下兼容,最好用v4包下的viewpager,Activity要继承FragmentActivity 其次用一个集合来存储所有的fragment页面在设置viewpager的适配器时,把存储fragment页面的list集合传入ada

ubuntu16.04 Git add 使用tab键卡死

以前使用Ubuntu14.04 进行git add 操作时使用TAB键可以很快自动补全,但自从使用16.04使用TAB半天没有反应。 一开始以为是Git版本问题,后验证与Git无关。 搜索发现与Dash有关,以下是博客原文: http://www.51testing.com/html/50/n-1245050.html 今天碰到一个问题git 后面的参数用Tab键无法补全

安卓中的fragment与viewPager的使用问题的解决

最近使用viewPager,结合fragment使用,发现fragment的周期将不符合他的原有的周期流程,多个fragment将会产生错位问题。       通过研究相关代码,发现fragment的切换实际调用的函数为setUserVisibleHint,通过在其中重写方法,将会达到fragment正确切换的效果。       public void setUserVisible