需求:
注意:本项目需导入Gson和ImageLoader包,PullToRefresh库文件,TabLayout的design包
一. Activity页面
1. Logo页面 MainActivity.java
package com.YueKao; import com.shared.SharedUtils; import android.os.Bundle; import android.os.Handler; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; @SuppressLint("HandlerLeak") public class MainActivity extends Activity { private Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case 0: //主页面 Intent intent1 = new Intent(MainActivity.this,HomeActivity.class); startActivity(intent1); finish(); break; case 1: //导航页 Intent intent2 = new Intent(MainActivity.this,LogoActivity.class); startActivity(intent2); finish(); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //调用工具类判断保存的布尔值 boolean b = SharedUtils.getBooleanData(MainActivity.this, "flag", false); if (b) { //已经进入过,现在是第二次 handler.sendEmptyMessageDelayed(0, 3000); }else{ //现在是第一次 SharedUtils.savaBooleanData(MainActivity.this, "flag", true); handler.sendEmptyMessageDelayed(1, 3000); } } }
2.导航页面 LogoActivity.java
package com.YueKao; import android.content.Intent; import android.support.v4.view.ViewPager; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RadioGroup; import com.adapter.MyPagerAdapter; import java.util.ArrayList; import java.util.List; public class LogoActivity extends AppCompatActivity { private RadioGroup Radio_groups; private ViewPager viewPager; private List<String> list; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_logo); Radio_groups = (RadioGroup) findViewById(R.id.Radio_groups); viewPager = (ViewPager) findViewById(R.id.viewPager); button = (Button) findViewById(R.id.button); //定义集合添加数据 list = new ArrayList<>(); list.add("http://img3.3lian.com/2013/s1/20/d/57.jpg"); list.add("http://pic2.nipic.com/20090424/1468853_230119053_2.jpg"); list.add("http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg"); list.add("http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg"); list.add("http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg"); //设置适配器 MyPagerAdapter adapter = new MyPagerAdapter(LogoActivity.this,list); viewPager.setAdapter(adapter); //滑动监听 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(int position) { // 选择页面 Radio_groups.check(Radio_groups.getChildAt(position).getId()); //显示按钮 if (position == list.size()-1) { button.setVisibility(View.VISIBLE); }else{ button.setVisibility(View.GONE); } } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageScrollStateChanged(int state) { } }); //RadioGroup组合按钮的滑动监听 Radio_groups.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId) { case R.id.radio_01: viewPager.setCurrentItem(0, false); break; case R.id.radio_02: viewPager.setCurrentItem(1, false); break; case R.id.radio_03: viewPager.setCurrentItem(2, false); break; case R.id.radio_04: viewPager.setCurrentItem(3, false); break; case R.id.radio_05: viewPager.setCurrentItem(4, false); break; default: break; } } }); } //点击按钮就跳转到登录页面 public void tiao(View v){ Intent intent = new Intent(LogoActivity.this,HomeActivity.class); startActivity(intent); finish(); } }
3. 主页面 HomeActivity.java
package com.YueKao; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.RadioGroup; import android.widget.Toast; import com.fragment.ImportantNewsFragment; import com.fragment.Mine_Fragment; import com.fragment.ShouYe_Fragment; import java.util.ArrayList; import java.util.List; public class HomeActivity extends AppCompatActivity implements View.OnClickListener{ private DrawerLayout drawerlayout; private ViewPager main_viewPager; private LinearLayout linearLayout; private FrameLayout framelayout; private List<Fragment> list; private RadioGroup group; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); //抽屉,即侧滑菜单的布局 drawerlayout = (DrawerLayout) findViewById(R.id.drawer_layout); //主内容区域的布局 framelayout = (FrameLayout) findViewById(R.id.frame_layout); //抽屉显示的布局 linearLayout = (LinearLayout) findViewById(R.id.linearLayout); //菜单选项布局 LinearLayout linear_01 = (LinearLayout) findViewById(R.id.linear_01); LinearLayout linear_02 = (LinearLayout) findViewById(R.id.linear_02); LinearLayout linear_03 = (LinearLayout) findViewById(R.id.linear_03); //菜单的点击事件 linear_01.setOnClickListener(this); linear_02.setOnClickListener(this); linear_03.setOnClickListener(this); main_viewPager = (ViewPager) findViewById(R.id.main_viewPager); group = (RadioGroup) findViewById(R.id.groups); //定义集合添加数据 list = new ArrayList<>(); list.add(new ShouYe_Fragment()); list.add(new ImportantNewsFragment()); list.add(new Mine_Fragment()); //加入此行代码可使当页数据一直有效显示,不会随着页面滑动而消失 main_viewPager.setOffscreenPageLimit(list.size()); //设置适配器 main_viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return list.get(position); } @Override public int getCount() { return list.size(); } }); //设置viewpager的滑动监听事件 main_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { group.check(group.getChildAt(position).getId()); } @Override public void onPageScrollStateChanged(int state) { } }); //设置button按钮的监听事件 group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { switch (checkedId){ case R.id.radio_01: main_viewPager.setCurrentItem(0,false); break; case R.id.radio_02: main_viewPager.setCurrentItem(1,false); break; case R.id.radio_03: main_viewPager.setCurrentItem(2,false); break; default:break; } } }); } //点击跳转拍照的页面 public void take (View view){ Toast.makeText(HomeActivity.this,"点击选择头像,请稍候... ",Toast.LENGTH_SHORT).show(); } //判断点击 的布局 @Override public void onClick(View view) { switch (view.getId()){ case R.id.linear_01: Toast.makeText(HomeActivity.this,"即将跳转 QQ登录页面,请稍候... ",Toast.LENGTH_SHORT).show(); drawerlayout.closeDrawers(); break; case R.id.linear_02: Toast.makeText(HomeActivity.this,"即将跳转 微信登录页面,请稍候... ",Toast.LENGTH_SHORT).show(); drawerlayout.closeDrawers(); break; case R.id.linear_03: Toast.makeText(HomeActivity.this,"即将跳转 微博登录页面,请稍候... ",Toast.LENGTH_SHORT).show(); drawerlayout.closeDrawers(); break; } } }
4. 详情网页 WebActivity.java
package com.YueKao; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class WebActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_web); WebView webView = (WebView) findViewById(R.id.webView); //获取传递的路径 String url = getIntent().getStringExtra("url"); //加载路径 webView.loadUrl(url); //显示JavaScript页面 webView.setWebViewClient(new WebViewClient()); WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setJavaScriptCanOpenWindowsAutomatically(true); } }
二. 自定义适配器
1. 进入Logo页面显示图片 MyPagerAdapter.java
package com.adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; public class MyPagerAdapter extends PagerAdapter{ private Context context; private List<String> list; public MyPagerAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public int getCount() { return list.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { //设置视图 ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list.get(position),imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
2. 显示多条目新闻信息 NewsAdapter.java
package com.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.YueKao.R; import com.bean.JsonBean; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.util.ImageLoaderUtil; import java.util.List; public class NewsAdapter extends BaseAdapter{ private List<JsonBean.ResultBean.DataBean> list; private Context context; private int ONLY_TITLE = 0; private int IMAGE_ONE = 1; private int IMAGE_TWO = 2; private int IMAGE_THREE = 3; public NewsAdapter(Context context, List<JsonBean.ResultBean.DataBean> 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 position; } @Override public int getViewTypeCount() { return 4; } @Override public int getItemViewType(int position) { /**每个fragment中展示新闻内容,要求:多条目加载和上拉加载,下拉刷新 多条目加载:奇数条目(第1357....)展示只有标题的布局 偶数条目(第2468.....)展示标题+图片样式的条目布局 */ if (position % 2 == 0){ if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null &&list.get(position).getThumbnail_pic_s03() != null ){ return IMAGE_THREE; }else if (list.get(position).getThumbnail_pic_s() != null && list.get(position).getThumbnail_pic_s02() != null){ return IMAGE_TWO; } return IMAGE_ONE; } return ONLY_TITLE; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position) == IMAGE_ONE){ Image01_ViewHolder holder; if (convertView == null){ convertView =View.inflate(context, R.layout.item_layout01,null); holder =new Image01_ViewHolder(); //查找控件 holder.author_name = (TextView) convertView.findViewById(R.id.author_name); holder.title = (TextView) convertView.findViewById(R.id.title); holder.image = (ImageView) convertView.findViewById(R.id.image); convertView.setTag(holder); }else { holder = (Image01_ViewHolder) convertView.getTag(); } //获取数据重新赋值 holder.title.setText(list.get(position).getTitle()); holder.author_name.setText(list.get(position).getAuthor_name()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image,ImageLoaderUtil.getDefaultOption()); }else if (getItemViewType(position) == IMAGE_TWO){ Image02_ViewHolder holder; if (convertView == null){ convertView =View.inflate(context, R.layout.item_layout02,null); holder =new Image02_ViewHolder(); //查找控件 holder.image002 = (ImageView) convertView.findViewById(R.id.image002); holder.image001 = (ImageView) convertView.findViewById(R.id.image001); holder.title = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); }else { holder = (Image02_ViewHolder) convertView.getTag(); } //获取数据重新赋值 holder.title.setText(list.get(position).getTitle()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image001,ImageLoaderUtil.getDefaultOption()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image002,ImageLoaderUtil.getDefaultOption()); } else if (getItemViewType(position) == IMAGE_THREE){ Image03_ViewHolder holder; if (convertView == null){ convertView =View.inflate(context, R.layout.item_layout03,null); holder =new Image03_ViewHolder(); //查找控件 holder.image01 = (ImageView) convertView.findViewById(R.id.image01); holder.image02 = (ImageView) convertView.findViewById(R.id.image02); holder.image03 = (ImageView) convertView.findViewById(R.id.image03); holder.title = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); }else { holder = (Image03_ViewHolder) convertView.getTag(); } //获取数据重新赋值 holder.title.setText(list.get(position).getTitle()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image01, ImageLoaderUtil.getDefaultOption()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image02,ImageLoaderUtil.getDefaultOption()); ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(),holder.image03,ImageLoaderUtil.getDefaultOption()); }else { Only_Title_ViewHolder holder; if (convertView == null){ convertView =View.inflate(context, R.layout.title_layout,null); holder =new Only_Title_ViewHolder(); //查找控件 holder.title = (TextView) convertView.findViewById(R.id.title); convertView.setTag(holder); }else { holder = (Only_Title_ViewHolder) convertView.getTag(); } //获取数据重新赋值 holder.title.setText(list.get(position).getTitle()); } return convertView; } //自定义优化缓存类 static class Only_Title_ViewHolder{ TextView title; } static class Image01_ViewHolder{ TextView title,author_name; ImageView image; } static class Image02_ViewHolder{ TextView title; ImageView image001,image002; } static class Image03_ViewHolder{ TextView title; ImageView image01,image02,image03; } }
3. 显示无限轮播图 ImportNewsAdapter.java
package com.adapter; import android.content.Context; import android.support.v4.view.PagerAdapter; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; public class ImportNewsAdapter extends PagerAdapter { private Context context; private List<String> list; public ImportNewsAdapter(Context context, List<String> list) { this.context = context; this.list = list; } @Override public int getCount() { return Integer.MAX_VALUE; } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public Object instantiateItem(ViewGroup container, int position) { //设置视图 ImageView imageView = new ImageView(context); imageView.setScaleType(ImageView.ScaleType.FIT_XY); ImageLoader.getInstance().displayImage(list.get(position%list.size()),imageView); container.addView(imageView); return imageView; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } }
4. 显示GridView条目信息 PageBeanAdapter.java
package com.adapter; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.YueKao.R; import com.bean.PageBean; import com.nostra13.universalimageloader.core.ImageLoader; import com.util.ImageLoaderUtil; import java.util.List; public class PageBeanAdapter extends BaseAdapter { private Context context; private List<PageBean.DataBean> data; public PageBeanAdapter(Context context, List<PageBean.DataBean> data) { this.context = context; this.data = data; } @Override public int getCount() { return data.size(); } @Override public Object getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ItemViewHolder holder; if (convertView == null) { convertView = View.inflate(context, R.layout.importnews_child_layout, null); holder = new ItemViewHolder(); //查找控件 holder.user_name = (TextView) convertView.findViewById(R.id.user_name); holder.web_url = (ImageView) convertView.findViewById(R.id.web_url); //绑定数据 convertView.setTag(holder); } else { //解绑 holder = (ItemViewHolder) convertView.getTag(); } //获取数据重新赋值 holder.user_name.setText(data.get(position).getUserName()); ImageLoader.getInstance().displayImage(data.get(position).getImg(), holder.web_url, ImageLoaderUtil.getDefaultOption()); return convertView; } static class ItemViewHolder{ ImageView web_url; TextView user_name; } }
三. 自定义2个bean类,一个解析新闻信息,一个显示GridView条目信息
四. 显示页面的fragment
1. 首页(父):ShouYe_Fragment.java
package com.fragment; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import java.util.ArrayList; import java.util.List; import com.YueKao.R; public class ShouYe_Fragment extends Fragment{ private TabLayout tabLayout; private ViewPager viewPager; private List<String> list; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.shouye_layout, container, false); //查找控件 viewPager = (ViewPager) view.findViewById(R.id.viewPager); tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); /** * TabLayout标题栏对应的参数(标题)可选值为: * top(头条),shehui(社会),guonei(国内),guoji(国际),yule(娱乐), * tiyu(体育)junshi(军事), keji(科技),caijing(财经),shishang(时尚) */ list = new ArrayList<>(); list.add("头条"); list.add("社会"); list.add("国内"); list.add("国际"); list.add("娱乐"); list.add("体育"); list.add("军事"); list.add("科技"); list.add("财经"); list.add("时尚"); //设置使用ViewPager+Fragment显示新闻列表数据布局的适配器 viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) { //得到当前页的标题,,,也就是设置当前页面显示的标题是tabLayout对应的标题 @Override public CharSequence getPageTitle(int position) { return list.get(position); } @Override public Fragment getItem(int position) { //在这个位置对比一下标题是什么,,,然后返回对应的fragment Shou_child_Fragment childFragment = new Shou_child_Fragment(); //判断所选的标题,进行传值显示 Bundle bundle = new Bundle(); bundle.putString("name",list.get(position)); childFragment.setArguments(bundle); //标题传值 return childFragment; } @Override public int getCount() { return list.size(); } }); //TabLyout要与ViewPager关联显示 tabLayout.setupWithViewPager(viewPager); } }
首页(子):Shou_child_Fragment.java
package com.fragment; import android.content.Intent; import android.os.AsyncTask; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import com.YueKao.WebActivity; import com.adapter.NewsAdapter; import com.bean.JsonBean; import com.google.gson.Gson; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import com.YueKao.R; import com.util.NetConnectionUtil; import com.util.StringUtil; import view.XListView; public class Shou_child_Fragment extends Fragment implements XListView.IXListViewListener{ private List<JsonBean.ResultBean.DataBean> list = new ArrayList<>(); private NewsAdapter adapter; private XListView xListView; private String data; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.shou_child_layout, container, false); //查找控件 xListView = (XListView) view.findViewById(R.id.XListView); //设置XListView的上拉刷新功能 xListView.setPullLoadEnable(true); xListView.setPullRefreshEnable(true); //XListView的监听事件 xListView.setXListViewListener(this); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //获取传递的标题数据 Bundle bundle = getArguments(); data = bundle.getString("name", "top"); //判断网络状态,异步加载数据 if (NetConnectionUtil.isNetConnectioned(getActivity())){ getDataFromNet(data); }else{ NetConnectionUtil.setNetConnectionWork(getActivity()); } //设置点击条目时的监听事件 xListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //获取点击条目的路径,传值显示webview页面 String url = list.get(position-1).getUrl(); Intent intent = new Intent(getActivity(), WebActivity.class); intent.putExtra("url",url); startActivity(intent); } }); } private void getDataFromNet(final String data) { AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { try { //路径 String path = "http://v.juhe.cn/toutiao/index?type="+data+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5"; //连接网络 URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); //响应数据 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); String json = StringUtil.streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { if (json== null || json.isEmpty()){ }else { //解析数据 JsonBean jsonBean = new Gson().fromJson(json, JsonBean.class); if (jsonBean != null && jsonBean.getResult().getData() != null){ //把获取的数据添加到集合中 list.addAll(jsonBean.getResult().getData()); //设置适配器 setAdapter(); //停止刷新数据 xListView.stopRefresh(); //设置刷新的时间 Date date = new Date(System.currentTimeMillis()); SimpleDateFormat format = new SimpleDateFormat("HH:mm"); xListView.setRefreshTime(format.format(date)); } } } }; task.execute(); } //设置适配器的方法 private void setAdapter() { if (adapter == null){ adapter = new NewsAdapter(getActivity(), list); xListView.setAdapter(adapter); }else { adapter.notifyDataSetChanged(); } } @Override public void onRefresh() { //判断网络状态,异步加载数据 if (NetConnectionUtil.isNetConnectioned(getActivity())){ getDataFromNet(data); }else{ NetConnectionUtil.setNetConnectionWork(getActivity()); } } @Override public void onLoadMore() { //判断网络状态,异步加载数据 if (NetConnectionUtil.isNetConnectioned(getActivity())){ getDataFromNet(data); }else{ NetConnectionUtil.setNetConnectionWork(getActivity()); } } }
2. 要闻: ImportantNewsFragment.java
package com.fragment; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.GridView; import android.widget.ImageView; import android.widget.LinearLayout; import com.YueKao.R; import com.adapter.ImportNewsAdapter; import com.adapter.PageBeanAdapter; import com.bean.PageBean; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.ILoadingLayout; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshGridView; import com.util.NetConnectionUtil; import com.util.StringUtil; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class ImportantNewsFragment extends Fragment{ private List<PageBean.DataBean> data = new ArrayList<>(); private PullToRefreshGridView refreshGridView; private ViewPager import_news_viewPager; private ILoadingLayout startLabels; private ILoadingLayout endLabels; private PageBeanAdapter adapter; private LinearLayout linearLayout; private List<ImageView> images; private List<String> list; private int page = 1; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what == 0){ int currentItem = import_news_viewPager.getCurrentItem(); import_news_viewPager.setCurrentItem(currentItem+1); //延时发送消息 handler.sendEmptyMessageDelayed(0,2888); } } }; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { //设置布局 View view = inflater.inflate(R.layout.import_news_layout, container, false); //查找控件 import_news_viewPager = (ViewPager) view.findViewById(R.id.import_news_viewPager); refreshGridView = (PullToRefreshGridView) view.findViewById(R.id.refresh_grid_view); linearLayout = (LinearLayout) view.findViewById(R.id.lineLayout); //1.设置刷新的模式(PullToRefreshBase.Mode.BOTH:上下都可以刷新加载) refreshGridView.setMode(PullToRefreshBase.Mode.BOTH); //2.设置刷新显示的文字 startLabels = refreshGridView.getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新"); startLabels.setRefreshingLabel("正在刷新..."); startLabels.setReleaseLabel("放开刷新"); endLabels = refreshGridView.getLoadingLayoutProxy(false, true); endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新..."); //3.设置监听事件 refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() { //下拉刷新 @Override public void onPullDownToRefresh(PullToRefreshBase<GridView> refreshView) { page++; //再次请求数据 getRefreshData(); } //上拉加载...不停的请求数据新的数据或者page=1的数据 @Override public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) { page++; //获取新的数据 getRefreshData(); } }); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //定义集合,添加网络图片路径 list = new ArrayList<>(); list.add("https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1505240546834&di=8e8e6ad014e4a7761a2a01536ed4a0be&imgtype=0&src=http%3A%2F%2Fdl.bizhi.sogou.com%2Fimages%2F2013%2F01%2F21%2F328891.jpg"); list.add("http://img17.3lian.com/d/file/201701/16/b9dafc9390b51ab2a882526b506079f3.jpg"); list.add("http://img17.3lian.com/d/file/201701/09/5a86ef93b6dff84cca985596e2c47a5f.jpg"); list.add("http://img.ivsky.com/img/bizhi/pre/201701/28/jinchen-025.jpg"); list.add("http://pic1.win4000.com/wallpaper/3/58744d39da779.jpg"); list.add("http://pic1.win4000.com/wallpaper/6/58743b760ff87.jpg"); //初始化小圆点的方法 initCircle(); //设置ViewPager适配器 ImportNewsAdapter adapter = new ImportNewsAdapter(getActivity(), list); import_news_viewPager.setAdapter(adapter); //设置ViewPager显示当前视图的位置 import_news_viewPager.setOffscreenPageLimit(list.size()); import_news_viewPager.setCurrentItem(list.size()%1000000); //使用handler类发送延时消息 handler.sendEmptyMessageDelayed(0,2888); //设置viewpager的监听事件 import_news_viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //如果选中了这一页,,,当前小圆点白色,,,否则灰色 for (int i = 0;i<images.size();i++){ //首先显示的是选中的图片 if (i == position%images.size()){ images.get(i).setImageResource(R.drawable.shape_selected); }else { images.get(i).setImageResource(R.drawable.shape_select_no); } } } @Override public void onPageScrollStateChanged(int state) { } }); //判断网络状态,异步加载数据 if (NetConnectionUtil.isNetConnectioned(getActivity())){ getDataFromNet(); }else{ NetConnectionUtil.setNetConnectionWork(getActivity()); } } private void initCircle() { //首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置 images = new ArrayList<>(); //linearLayout布局中移除所有的view linearLayout.removeAllViews(); //集合数据显示对应的圆点 for (int i = 0;i<list.size();i++){ ImageView imageView = new ImageView(getActivity()); //初始化一个ImageView //设置首先选中的圆点的颜色 if ( i == 0){ imageView.setImageResource(R.drawable.shape_selected); }else { imageView.setImageResource(R.drawable.shape_select_no); } //把设置的初始化视图添加到集合中 images.add(imageView); //最后整个视图显示在线性布局中 LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); //圆点之间的像素间距 params.setMargins(8,0,8,0); linearLayout.addView(imageView,params); } } //刷新数据的方法,下拉刷新的时候之请求第一页的数据 private void getRefreshData() { AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... voids) { try { //路径 String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+page; //请求网络数据 URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); //响应数据 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); String json = StringUtil.streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { //解析数据 PageBean pageBean = new Gson().fromJson(json, PageBean.class); //数据要添加到集合的最前边 data.addAll(0,pageBean.getData()); setAdapter(); //停止刷新 refreshGridView.onRefreshComplete(); //设置本次刷新的时间 Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); startLabels.setLastUpdatedLabel("上次刷新的时间为:"+dateFormat.format(date)); } }; task.execute(); } //网络获取刷新的数据 public void getDataFromNet() { AsyncTask<Void,Void,String> task = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { try { //路径 String path = "http://www.yulin520.com/a2a/impressApi/news/mergeList?pageSize=10&page="+page; //连接网络 URL url = new URL(path); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setConnectTimeout(5000); connection.setReadTimeout(5000); //响应数据 int responseCode = connection.getResponseCode(); if (responseCode == 200){ InputStream inputStream = connection.getInputStream(); //返回数据 String json = StringUtil.streamToString(inputStream,"utf-8"); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String result) { //解析数据,添加到集合中 PageBean pageBean = new Gson().fromJson(result, PageBean.class); data.addAll(pageBean.getData()); setAdapter(); //数据加载展示完之后...停止加载 refreshGridView.onRefreshComplete(); } }; task.execute(); } //设置适配器的方法 public void setAdapter(){ if (adapter == null){ adapter = new PageBeanAdapter(getActivity(),data); refreshGridView.setAdapter(adapter); }else { //刷新适配器 adapter.notifyDataSetChanged(); } } }
3. 我的: 自定义
五. 存取数据的 SharedPreferences类
package com.shared; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; public class SharedUtils { static SharedPreferences preferences; static String File = "data"; //保存数据的方法 public static void savaBooleanData(Context context, String key,boolean value){ if (preferences == null) { preferences = context.getSharedPreferences(File, Context.MODE_PRIVATE); } //获取编辑器对象 Editor editor = preferences.edit(); editor.putBoolean(key, value).commit(); } //获取数据的方法 public static boolean getBooleanData(Context context, String key,boolean defValue){ if (preferences == null) { preferences = context.getSharedPreferences(File, Context.MODE_PRIVATE); } return preferences.getBoolean(key, defValue); } }
六. 自定义工具类;(找关联代码)
七. view包下的XListView;(找关联代码)
八. 自定义的布局文件:
1. 设置字体颜色的color文件夹下的 color.xml
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:color="@color/selected"></item> <item android:state_checked="false" android:color="@color/defaulted"></item> </selector>
2. drawable文件夹下设置小圆点的布局文件
(1)shape_selected.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#00b7ff"></solid> <corners android:radius="8dp"></corners> <size android:width="8dp" android:height="8dp"></size> </shape>
(2)shape_select_no.xml
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#dfdfdf"></solid> <corners android:radius="8dp"></corners> <size android:width="8dp" android:height="8dp"></size> </shape>
*** 主要的布局:
activity_main.xml<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:scaleType="fitXY" android:src="@drawable/logo" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>activity_home.xml
<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <!--主内容区域的视图--> <FrameLayout android:id="@+id/frame_layout" android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:id="@+id/relative" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.view.ViewPager android:id="@+id/main_viewPager" android:layout_above="@+id/groups" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> <RadioGroup android:id="@+id/groups" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <RadioButton android:text="首页" android:checked="true" android:textSize="18sp" android:layout_weight="1" style="@style/ButtonStyle" android:id="@+id/radio_01" android:layout_width="0dp" android:textColor="@color/color" android:layout_height="wrap_content" /> <RadioButton android:text="要闻" android:textSize="18sp" android:layout_weight="1" style="@style/ButtonStyle" android:id="@+id/radio_02" android:layout_width="0dp" android:textColor="@color/color" android:layout_height="wrap_content" /> <RadioButton android:text="我的" android:textSize="18sp" android:layout_weight="1" style="@style/ButtonStyle" android:id="@+id/radio_03" android:layout_width="0dp" android:textColor="@color/color" android:layout_height="wrap_content" /> </RadioGroup> </RelativeLayout> </FrameLayout> <!--抽屉展示的布局--> <LinearLayout android:layout_gravity="left" android:orientation="vertical" android:layout_width="250dp" android:background="#00BFFF" android:id="@+id/linearLayout" android:layout_height="match_parent"> <LinearLayout android:padding="20dp" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal"> <ImageView android:onClick="take" android:layout_width="66dp" android:layout_height="66dp" android:src="@drawable/phone" android:layout_gravity="center_horizontal" /> <TextView android:text="未登录" android:onClick="take" android:textSize="21sp" android:layout_marginTop="5dp" android:layout_marginLeft="70dp" android:gravity="center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <LinearLayout android:padding="20dp" android:id="@+id/linear_01" android:orientation="horizontal" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:src="@drawable/qq" android:layout_width="36dp" android:layout_height="36dp" android:layout_marginLeft="30dp" android:layout_gravity="center_vertical" /> <TextView android:text="QQ登录" android:textSize="18sp" android:gravity="center_vertical" android:layout_marginLeft="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <LinearLayout android:padding="20dp" android:id="@+id/linear_02" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="36dp" android:layout_height="36dp" android:src="@drawable/weixin" android:layout_marginLeft="30dp" android:layout_gravity="center_vertical" /> <TextView android:text="微信登录" android:textSize="18sp" android:gravity="center_vertical" android:layout_marginLeft="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> <LinearLayout android:padding="20dp" android:id="@+id/linear_03" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_width="36dp" android:src="@drawable/sina" android:layout_height="36dp" android:layout_marginLeft="30dp" android:layout_gravity="center_vertical" /> <TextView android:text="微博登录" android:textSize="18sp" android:layout_marginLeft="15dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" /> </LinearLayout> </LinearLayout> </android.support.v4.widget.DrawerLayout>
activity_logo.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> <RadioGroup android:visibility="gone" android:orientation="horizontal" android:id="@+id/Radio_groups" android:gravity="center_horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="80dp" android:layout_alignParentBottom="true" > <RadioButton android:padding="8dp" android:checked="true" android:id="@+id/radio_01" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:padding="8dp" android:id="@+id/radio_02" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:padding="8dp" android:id="@+id/radio_03" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:padding="8dp" android:id="@+id/radio_04" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <RadioButton android:padding="8dp" android:id="@+id/radio_05" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </RadioGroup> <Button android:onClick="tiao" android:text="进入应用" android:gravity="center" android:visibility="gone" android:id="@+id/button" android:layout_width="108dp" android:layout_height="wrap_content" android:layout_marginBottom="20dp" android:layout_centerHorizontal="true" android:layout_alignParentBottom="true" /> </RelativeLayout>
activity_web.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent"></WebView> </RelativeLayout>首页布局:
shouye_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:layout_width="match_parent" app:tabSelectedTextColor="#FF0000" app:tabIndicatorHeight="0dp" android:layout_height="60dp" android:id="@+id/tabLayout" app:tabTextColor="#000000" app:tabTextAppearance="@style/TabLayoutTextStyle" app:tabMode="scrollable"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> </LinearLayout>
shouye_child_layout.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <view.XListView android:scrollbars="none" android:id="@+id/XListView" android:layout_width="match_parent" android:layout_height="match_parent"></view.XListView> </LinearLayout>要闻布局:
import_news_layout.xml(无限轮播图)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:id="@+id/relative" android:layout_height="328dp" android:layout_width="match_parent" > <android.support.v4.view.ViewPager android:id="@+id/import_news_viewPager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> <LinearLayout android:id="@+id/lineLayout" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="18dp" android:layout_alignParentRight="true" android:layout_alignBottom="@+id/import_news_viewPager"></LinearLayout> </RelativeLayout> <com.handmark.pulltorefresh.library.PullToRefreshGridView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:stretchMode="columnWidth" android:id="@+id/refresh_grid_view" android:layout_height="fill_parent" android:layout_width="fill_parent" android:horizontalSpacing="1dp" android:columnWidth="100dp" android:verticalSpacing="1dp" android:numColumns="3" android:gravity="fill" ptr:ptrMode="both" ptr:ptrDrawable="@drawable/huan" /> </LinearLayout>
importnews_child_layout.xml(GridView布局)
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:padding="8dp" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/web_url" android:layout_width="150dp" android:layout_height="120dp" android:layout_marginLeft="10dp" android:layout_gravity="center_horizontal"/> <TextView android:textSize="16sp" android:id="@+id/user_name" android:layout_marginTop="12dp" android:layout_marginLeft="50dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/web_url" android:layout_gravity="center_horizontal" /> </RelativeLayout>
3. 多条目展示数据的4种布局
(1)item_layout01.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_weight="2" android:layout_width="0dp" android:orientation="vertical" android:layout_height="wrap_content" android:layout_alignParentLeft="true"> <TextView android:textSize="18sp" android:id="@+id/title" android:textStyle="bold" android:layout_marginLeft="10dp" android:layout_marginTop="18dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <TextView android:textSize="13sp" android:id="@+id/author_name" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:id="@+id/image" android:layout_weight="1" android:layout_width="0dp" android:layout_height="100dp" android:layout_marginRight="5dp" android:layout_gravity="center_vertical" /> </LinearLayout>
(2)item_layout02.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:textSize="18sp" android:id="@+id/title" android:textStyle="bold" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:layout_marginTop="18dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_weight="1" android:layout_width="0dp" android:id="@+id/image001" android:layout_height="120dp" /> <ImageView android:layout_weight="1" android:layout_width="0dp" android:id="@+id/image002" android:layout_height="120dp" android:layout_marginLeft="3dp"/> <ImageView android:layout_weight="1" android:layout_width="0dp" android:layout_height="120dp" android:layout_marginLeft="3dp"/> </LinearLayout> </LinearLayout>
(3)item_layout03.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:textSize="18sp" android:id="@+id/title" android:textStyle="bold" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:orientation="horizontal" android:layout_marginTop="18dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:layout_weight="1" android:id="@+id/image01" android:layout_width="0dp" android:layout_height="120dp" /> <ImageView android:layout_weight="1" android:id="@+id/image02" android:layout_width="0dp" android:layout_height="120dp" android:layout_marginLeft="3dp"/> <ImageView android:layout_weight="1" android:id="@+id/image03" android:layout_width="0dp" android:layout_height="120dp" android:layout_marginLeft="3dp"/> </LinearLayout> </LinearLayout>
(4)title_layout.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/title" android:textSize="18sp" android:layout_height="60dp" android:gravity="center_vertical" android:layout_marginLeft="10dp" android:layout_width="wrap_content" /> </LinearLayout>
4. 展示xlistview布局的2个xml(1)xlistview_header.xml(2)xlistview_footer.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="bottom" > <RelativeLayout android:id="@+id/xlistview_header_content" android:layout_width="fill_parent" android:layout_height="60dp" > <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:gravity="center" android:orientation="vertical" android:id="@+id/xlistview_header_text"> <TextView android:id="@+id/xlistview_header_hint_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/xlistview_header_hint_normal" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="3dp" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/xlistview_header_last_time" android:textSize="12sp" /> <TextView android:id="@+id/xlistview_header_time" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="12sp" /> </LinearLayout> </LinearLayout> <ImageView android:id="@+id/xlistview_header_arrow" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@id/xlistview_header_text" android:layout_centerVertical="true" android:layout_marginLeft="-35dp" android:src="@drawable/xlistview_arrow" /> <ProgressBar android:id="@+id/xlistview_header_progressbar" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignLeft="@id/xlistview_header_text" android:layout_centerVertical="true" android:layout_marginLeft="-40dp" android:visibility="invisible" /> </RelativeLayout> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <RelativeLayout android:id="@+id/xlistview_footer_content" android:layout_width="fill_parent" android:layout_height="wrap_content" android:padding="10dp" > <ProgressBar android:id="@+id/xlistview_footer_progressbar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:visibility="invisible" /> <TextView android:id="@+id/xlistview_footer_hint_textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/xlistview_footer_hint_normal" /> </RelativeLayout> </LinearLayout>
5. values文件夹下的布局文件
(1)colors.xml
<!-- 字体颜色 --> <color name="selected">#FF0000</color> <color name="defaulted">#000000</color>
(2)dimens.xml
<dimen name="text_16_sp">18dp</dimen>(3)strings.xml添加以下代码:
<string name="xlistview_header_hint_normal">下拉刷新</string> <string name="xlistview_header_hint_ready">松开刷新数据</string> <string name="xlistview_header_hint_loading">正在加载...</string> <string name="xlistview_header_last_time">上次更新时间:</string> <string name="xlistview_footer_hint_normal">查看更多</string> <string name="xlistview_footer_hint_ready">松开载入更多</string>
(4) styles.xml加入下面代码
<style name="ButtonStyle"> <item name="android:button">@null</item> <item name="android:gravity">center</item> <item name="android:padding">10dp</item> <item name="android:background">#ffffff</item> </style><style name="TabLayoutTextStyle"> <item name="android:textSize">@dimen/text_16_sp</item> </style>
九. AndroidManifest.xml中
1. 加入请求网络数据 ,判断网络状态的权限;
2.声明imageloader的name属性。