本文共 8410 字,大约阅读时间需要 28 分钟。
完成侧拉栏的显示,侧拉首页对应的:首页+应用+游戏这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); */@Overridepublic boolean onOptionsItemSelected(MenuItem item) { toggle.onOptionsItemSelected(item); return super.onOptionsItemSelected(item);}
private void initActionBar() { ActionBar actionBar = getSupportActionBar(); actionBar.setIcon(R.drawable.ic_launcher);// 设置home图标 actionBar.setDisplayShowHomeEnabled(true);// 显示home图标 actionBar.setHomeButtonEnabled(true);// home图标可点击 actionBar.setDisplayHomeAsUpEnabled(true);// 显示导航图标}
@Overridepublic 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,然后添加轮播图
注意:更新ui需要再主线程,所以CommonUtil.runOnUIThread(…)
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { contentPager = new ContentPager(getActivity()) { @Override public Object requestData() { return getData(); } @Override public 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()); Listlist = (List ) GsonUtil.jsonToList(json, new TypeToken
>() {}.getType()); addAndRefreshData(list); return list;}private void addAndRefreshData(List list) { appsList.addAll(list); CommonUtil.runOnUIThread(new Runnable() { @Override public void run() { adapter.notifyDataSetChanged(); } });}
格式化app的大小:包:String android.text.format: 方法: Formatter.formatFileSize(Context context, long number)
public class HomeFragAdapter extends MyBaseAdapter{ public HomeFragAdapter(List list) { super(list); } @Override public 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); } }}
参考:
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() { @Override public void onRefresh(PullToRefreshBase 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;}
先要在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() { @Override public 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); } } } @Override public void onPageScrolled(int arg0, float arg1, int arg2) {} @Override public 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_drawable.xml
转载地址:http://ytdvi.baihongyu.com/