项目效果图:
注意:
1. 在开始项目之前自己导入PullToRefresh需要的库文件pullToRefreshLibrary;
2. 导入Gson包,ImageLoader包,关联TabLayout的design项目文件;
http://v.juhe.cn/toutiao/index?type=top&key=c4479ad58f41e7f78a8fa073d0b1f1b5
实现代码:
一.MAinActivity.java(实现无限轮播图)
package com.month;
import android.os.Handler;
import android.os.Message;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.LinearLayout;
import com.adapter.MyPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private ViewPager main_viewPager;
private LinearLayout linearLayout;
private List<ImageView> images;
private List<String> list;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 0) {
int currentItem = main_viewPager.getCurrentItem();
main_viewPager.setCurrentItem(currentItem + 1);
//延时发送消息
handler.sendEmptyMessageDelayed(0, 2888);
}
}
};
private MyPagerAdapter pagerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
linearLayout = (LinearLayout) findViewById(R.id.lineLayout);
main_viewPager = (ViewPager) findViewById(R.id.main_ViewPager);
//定义集合添加数据
list = new ArrayList<>();
list.add("http://pic8.nipic.com/20100701/5290458_114840036316_2.jpg");
list.add("http://pic2.nipic.com/20090424/1468853_230119053_2.jpg");
list.add("http://img3.3lian.com/2013/s1/20/d/57.jpg");
list.add("http://pic39.nipic.com/20140226/18071023_164300608000_2.jpg");
list.add("http://a0.att.hudong.com/15/08/300218769736132194086202411_950.jpg");
// 初始化小圆点的方法
initCircle();
//设置适配器
setAdapter();
//延时发送空消息,设置图片的位置
main_viewPager.setCurrentItem(list.size() % 10000);
handler.sendEmptyMessageDelayed(0, 2888);
}
private void initCircle() {
//首先需要一个集合记录这些小圆点的图片,,,,当页面切换的时候,可以从集合中取出imageView进行显示图片的设置
images = new ArrayList<>();
//再清除线性布局中的view视图
linearLayout.removeAllViews();
//遍历集合数据对应的圆点
for(int i = 0;i<list.size();i++) {
//先初始化一个ImageView视图
ImageView imageView = new ImageView(MainActivity.this);
//再设置小圆点刚开始的颜色
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 setAdapter() {
//设置无限轮播图的适配器
if (pagerAdapter == null) {
pagerAdapter = new MyPagerAdapter(MainActivity.this, list);
main_viewPager.setAdapter(pagerAdapter);
//viewPager页面改变的监听事件
main_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) {
}
});
}else {
pagerAdapter.notifyDataSetChanged();
}
}
}
二.HomeActivity.java(实现TabLayout标题栏,侧滑菜单栏)
package com.month;
import android.content.Intent;
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.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import com.fragment.News_Fragment;
import java.util.ArrayList;
import java.util.List;
public class HomeActivity extends AppCompatActivity {
private ViewPager home_viewPager;
private DrawerLayout drawerlayout;
private FrameLayout framelayout;
private RelativeLayout relative;
private List<String> data;
private ListView listView;
private List<String> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
//抽屉,即侧滑菜单的布局
drawerlayout = (DrawerLayout) findViewById(R.id.drawerLayout);
//主内容区域的布局
framelayout = (FrameLayout) findViewById(R.id.frameLayout);
//菜单选项布局
listView = (ListView) findViewById(R.id.listView);
//抽屉显示的布局
relative = (RelativeLayout) findViewById(R.id.relative);
//ViewPager和TabLayout布局
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
home_viewPager = (ViewPager) findViewById(R.id.home_viewPager);
//定义标题栏集合添加数据
list = new ArrayList<>();
list.add("头条");
list.add("社会");
list.add("国内");
list.add("国际");
list.add("娱乐");
list.add("体育");
list.add("军事");
list.add("科技");
list.add("财经");
list.add("时尚");
home_viewPager.setOffscreenPageLimit(list.size());
//设置适配器
home_viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
//拿到频道的标题
@Override
public CharSequence getPageTitle(int position) {
return list.get(position);
}
@Override
public Fragment getItem(int position) {
//在这个位置对比一下标题是什么,,,然后返回对应的fragment
News_Fragment news_fragment = new News_Fragment();
//获取标题,进行传值
Bundle bundle = new Bundle();
bundle.putString("name",list.get(position));
news_fragment.setArguments(bundle);
return news_fragment;
}
@Override
public int getCount() {
return list.size();
}
});
//TabLyout要与ViewPager关联显示
tabLayout.setupWithViewPager(home_viewPager);
//定义侧滑菜单栏集合添加数据
data = new ArrayList<>();
data.add("了解会员特权");
data.add("我的收藏");
data.add("我的钱包");
data.add("个性装扮");
data.add("我的相册");
data.add("我的文件");
//设置适配器
ArrayAdapter<String> adapter = new ArrayAdapter<>(HomeActivity.this, android.R.layout.simple_list_item_1, android.R.id.text1, data);
listView.setAdapter(adapter);
//条目的点击事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
//点击 侧滑中 我的收藏,跳转到新页面,此页面显示 到数据库中查询 收藏的新闻,展示在ListView中,点击能显示详情(点击 侧滑中的 功能,右边主页面联动)
if (data.get(i).equals("我的收藏")){
Intent intent = new Intent(HomeActivity.this, ShouCang_Activity.class);
startActivity(intent);
}
}
});
}
}
三.WebActivity.java(显示webview页面)
package com.month;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;
import com.bean.NewsBean;
import com.dao.UserDao;
public class WebActivity extends AppCompatActivity {
private NewsBean.ResultBean.DataBean databean;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web);
WebView webView = (WebView) findViewById(R.id.webView);
//获取加载的路径
databean = (NewsBean.ResultBean.DataBean) getIntent().getSerializableExtra("list");
webView.loadUrl(databean.getUrl());
//设置当前WebView页面
webView.setWebViewClient(new WebViewClient());
WebSettings settings = webView.getSettings();
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setJavaScriptEnabled(true);
}
/**
* 详情页面,包含 收藏功能,点击收藏 把次新闻的主要数据保存到sqlite中,
* 设置字段 String _id, String desc,String Url,String images
* @param view
*/
public void shouCang(View view){
//调用UserDao类,添加数据到数据库
UserDao userDao = new UserDao(WebActivity.this);
long insert = userDao.insert(databean.getTitle(), databean.getDate(), databean.getUrl(), databean.getThumbnail_pic_s(), databean.getThumbnail_pic_s02(), databean.getThumbnail_pic_s03());
if (insert != 0){
Toast.makeText(WebActivity.this,"收藏成功",Toast.LENGTH_SHORT).show();
}
}
}
* 收藏网页数据的Activity
package com.month; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import com.adapter.ShouCang_Adapter; import com.bean.NewsBean; import com.dao.UserDao; import java.util.List; public class ShouCang_Activity extends AppCompatActivity { private List<NewsBean.ResultBean.DataBean> select; private ShouCang_Adapter shouCang_adapter; private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_shoucang); listView = (ListView) findViewById(R.id.listView); //调用UserDao类,查询数据库中的内容 UserDao userDao = new UserDao(ShouCang_Activity.this); select = userDao.selectAll(); Log.i("ShouCang集合",select.toString()); //设置适配器显示数据 if (shouCang_adapter == null){ shouCang_adapter = new ShouCang_Adapter(ShouCang_Activity.this, select); listView.setAdapter(shouCang_adapter); }else { shouCang_adapter.notifyDataSetChanged(); } //条目的点击事件 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //点击 侧滑中 我的收藏,跳转到新页面,此页面显示 到数据库中查询 收藏的新闻,展示在ListView中,点击能显示详情(点击 侧滑中的 功能,右边主页面联动) Intent intent = new Intent(ShouCang_Activity.this, ShowActivity.class); intent.putExtra("url",select.get(position).getUrl()); startActivity(intent); } }); } }
package com.month; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; public class ShowActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_show); WebView show_WebView = (WebView) findViewById(R.id.show_WebView); //获取加载的路径 String url = getIntent().getStringExtra("url"); show_WebView.loadUrl(url); //设置当前WebView页面 show_WebView.setWebViewClient(new WebViewClient()); WebSettings settings = show_WebView.getSettings(); settings.setJavaScriptCanOpenWindowsAutomatically(true); settings.setJavaScriptEnabled(true); } }
四.实现无限轮播图的适配器MyPagerAdapter :
package com.adapter;
import android.content.Context;
import android.content.Intent;
import android.support.v4.view.PagerAdapter;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.month.HomeActivity;
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 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);
//设置点击ViewPager跳转到主页面
imageView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()){
case MotionEvent.ACTION_UP:
//点击跳转,必须在按下抬起的动作之后
Intent intent = new Intent(context, HomeActivity.class);
context.startActivity(intent);
break;
}
return true;
}
});
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
五.显示ListView多条目的适配器MyBaseAdapter :
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.bean.NewsBean;
import com.month.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.util.ImageLoaderUtil;
import java.util.List;
public class MyBaseAdapter extends BaseAdapter{
private List<NewsBean.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 MyBaseAdapter(Context context, List<NewsBean.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.only_title, null);
holder = new Only_Title_ViewHolder();
//查找控件
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.author_name = (TextView) convertView.findViewById(R.id.author_name);
convertView.setTag(holder);
} else {
holder = (Only_Title_ViewHolder) convertView.getTag();
}
//获取数据重新赋值
holder.title.setText(list.get(position).getTitle());
holder.author_name.setText(list.get(position).getAuthor_name());
}
}
return convertView;
}
//自定义优化缓存类
static class Only_Title_ViewHolder{
TextView title,author_name;
}
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;
}
}
*显示收藏的网页布局适配器:
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.bean.NewsBean;
import com.month.R;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.util.ImageLoaderUtil;
import java.util.List;
public class ShouCang_Adapter extends BaseAdapter{
private List<NewsBean.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 ShouCang_Adapter(Context context, List<NewsBean.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.shoucang_one_item,null);
holder =new Image01_ViewHolder();
//查找控件
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.date = (TextView) convertView.findViewById(R.id.date);
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.date.setText(list.get(position).getDate());
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.shoucang_two_item,null);
holder =new Image02_ViewHolder();
//查找控件
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.date = (TextView) convertView.findViewById(R.id.date);
holder.image02 = (ImageView) convertView.findViewById(R.id.image02);
holder.image01 = (ImageView) convertView.findViewById(R.id.image01);
convertView.setTag(holder);
}else {
holder = (Image02_ViewHolder) convertView.getTag();
}
//获取数据重新赋值
holder.title.setText(list.get(position).getTitle());
holder.date.setText(list.get(position).getDate());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s(),holder.image02,ImageLoaderUtil.getDefaultOption());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s02(),holder.image01,ImageLoaderUtil.getDefaultOption());
} else if (getItemViewType(position) == IMAGE_THREE){
Image03_ViewHolder holder;
if (convertView == null){
convertView =View.inflate(context, R.layout.shoucang_three_item,null);
holder =new Image03_ViewHolder();
//查找控件
holder.title = (TextView) convertView.findViewById(R.id.title);
holder.date = (TextView) convertView.findViewById(R.id.date);
holder.image001 = (ImageView) convertView.findViewById(R.id.image001);
holder.image002 = (ImageView) convertView.findViewById(R.id.image002);
holder.image003 = (ImageView) convertView.findViewById(R.id.image003);
convertView.setTag(holder);
}else {
holder = (Image03_ViewHolder) convertView.getTag();
}
//获取数据重新赋值
holder.title.setText(list.get(position).getTitle());
holder.date.setText(list.get(position).getDate());
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());
ImageLoader.getInstance().displayImage(list.get(position).getThumbnail_pic_s03(),holder.image003,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);
holder.date = (TextView) convertView.findViewById(R.id.date);
convertView.setTag(holder);
}else {
holder = (Only_Title_ViewHolder) convertView.getTag();
}
//获取数据重新赋值
holder.title.setText(list.get(position).getTitle());
holder.date.setText(list.get(position).getDate());
}
return convertView;
}
//自定义优化缓存类
static class Only_Title_ViewHolder{
TextView title,date;
}
static class Image01_ViewHolder{
TextView title,date;
ImageView image;
}
static class Image02_ViewHolder{
TextView title,date;
ImageView image01,image02;
}
static class Image03_ViewHolder{
TextView title,date;
ImageView image001,image002,image003;
}
}
六. 自定义bean类
七. 实现数据的 News_Fargment类:
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 android.widget.ListView;
import com.adapter.MyBaseAdapter;
import com.google.gson.Gson;
import com.handmark.pulltorefresh.library.ILoadingLayout;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.bean.NewsBean;
import com.month.WebActivity;
import com.util.NetConnectionUtil;
import com.util.StringUtil;
import com.month.R;
public class News_Fragment extends Fragment{
//记录当前页面所有的数据....上拉或下拉添加到集合
private List<NewsBean.ResultBean.DataBean> list = new ArrayList<>();
private PullToRefreshListView refreshListView;
private int page_num = 1; //下拉刷新的页数
private ILoadingLayout startLabels;
private ILoadingLayout endLabels;
private MyBaseAdapter adapter;
private String encode;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.news_layout, container, false);
refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view);
//点击新闻,跳转到详情页面,通过webview加载
refreshListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getActivity(), WebActivity.class);
//传当前条目的对象值
intent.putExtra("list",list.get(position-1));
startActivity(intent);
}
});
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//获取传递的标题数据,把获取的标题转码实现
Bundle bundle = getArguments();
String data = bundle.getString("name", "top");
encode = URLEncoder.encode(data);
//通过HttpUrlConnection进行相关栏目json串请求,请求前先判断网络是否可用
if (NetConnectionUtil.isNetConnectioned(getActivity())){
getDataFromNet();
}else {
NetConnectionUtil.setNetConnectionWork(getActivity());
}
//1.设置刷新的模式(PullToRefreshBase.Mode.BOTH:上下都可以刷新加载)
refreshListView.setMode(PullToRefreshBase.Mode.BOTH);
//2.设置刷新显示的文字
startLabels = refreshListView.getLoadingLayoutProxy(true, false);
startLabels.setPullLabel("下拉刷新");
startLabels.setRefreshingLabel("正在刷新...");
startLabels.setReleaseLabel("放开刷新");
endLabels = refreshListView.getLoadingLayoutProxy(false, true);
endLabels.setPullLabel("上拉刷新");
endLabels.setRefreshingLabel("正在载入...");
endLabels.setReleaseLabel("放开刷新...");
//3.设置监听事件
refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() {
//下拉刷新
@Override
public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) {
//当下拉刷新的时候,将第几页设成1,重新获取数据,请求前先判断网络是否可用
if (NetConnectionUtil.isNetConnectioned(getActivity())){
getRefreshData();
}else {
NetConnectionUtil.setNetConnectionWork(getActivity());
}
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) {
page_num++;
//当上拉加载更多的时候,将第几页的数字加1,重新获取;请求前先判断网络是否可用
if (NetConnectionUtil.isNetConnectioned(getActivity())){
getDataFromNet();
}else {
NetConnectionUtil.setNetConnectionWork(getActivity());
}
}
});
}
/**
* 下拉刷新获取数据
* 1.page_num 改变
* 2.每次添加到集合的前边
*/
private void getRefreshData() {
//1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
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="+encode+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5";
//连接网络
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) {
//解析数据
NewsBean newsBean = new Gson().fromJson(result, NewsBean.class);
//把解析的数据添加到集合前面,设置适配器
list.addAll(0,newsBean.getResult().getData());
setAdapter();
//停止刷新
refreshListView.onRefreshComplete();
//设置本次刷新的时间
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
startLabels.setLastUpdatedLabel("上次刷新的时间为:"+dateFormat.format(date));
}
};
task.execute();
}
//异步加载网络数据的方法
public void getDataFromNet() {
//1.创建异步任务的对象..第一个参数url路径Void,第二个参数表示进度Void,第三个参数返回值类型String(可以为空)
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="+encode+"&key=c4479ad58f41e7f78a8fa073d0b1f1b5";
//连接网络
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) {
//解析数据
NewsBean newsBean = new Gson().fromJson(result, NewsBean.class);
//把解析的数据添加到集合中,设置适配器
list.addAll(newsBean.getResult().getData());
setAdapter();
//停止刷新
refreshListView.onRefreshComplete();
}
};
task.execute();
}
//设置适配器的方法
public void setAdapter(){
if (adapter == null){
adapter = new MyBaseAdapter(getActivity(), list);
refreshListView.setAdapter(adapter);
}else {
adapter.notifyDataSetChanged();
}
}
}
八. 创建的数据库类:
package com.sqlite; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class MyHelper extends SQLiteOpenHelper{ public MyHelper(Context context) { super(context, "bawei.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { // 创建表结构 db.execSQL("create table user (id integer primary key autoincrement, title text,date text,url text,pic_s text,pic_s02 text,pic_s03 text)"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { } }
九. 操作数据库的dao类方法:
package com.dao;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.bean.NewsBean;
import com.sqlite.MyHelper;
import java.util.ArrayList;
import java.util.List;
public class UserDao {
private MyHelper helper;
//传递上下文对象的有参构造方法
public UserDao(Context context) {
helper = new MyHelper(context);
}
//添加方法
public long insert(String title, String date, String url, String thumbnail_pic_s, String thumbnail_pic_s02, String thumbnail_pic_s03) {
SQLiteDatabase database = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title",title);
values.put("date",date);
values.put("url",url);
values.put("pic_s",thumbnail_pic_s);
values.put("pic_s02",thumbnail_pic_s02);
values.put("pic_s03",thumbnail_pic_s03);
long update = database.insert("user", null, values);
database.close();
return update;
}
//查询已经收藏的新闻数据
public List<NewsBean.ResultBean.DataBean> selectAll() {
List<NewsBean.ResultBean.DataBean> list =new ArrayList<>();
SQLiteDatabase database = helper.getWritableDatabase();
Cursor cursor = database.query("user", null, null, null, null, null, null);
while (cursor.moveToNext()){
//拿到查出来的数据
String title = cursor.getString(cursor.getColumnIndex("title"));
String date = cursor.getString(cursor.getColumnIndex("date"));
String url = cursor.getString(cursor.getColumnIndex("url"));
String pic_s = cursor.getString(cursor.getColumnIndex("pic_s"));
String pic_s02 = cursor.getString(cursor.getColumnIndex("pic_s02"));
String pic_s03 = cursor.getString(cursor.getColumnIndex("pic_s03"));
//new出来对象
NewsBean.ResultBean.DataBean dataBean = new NewsBean.ResultBean.DataBean(title, date, url, pic_s, pic_s02, pic_s03);
list.add(dataBean);
}
cursor.close();
database.close();
Log.i("Dao集合",list.toString());
return list;
}
}
十. util工具包中:
1. 全局化配置ImageLoader类的 BaseApplication.java
package com.util;
import android.app.Application;
//全局初始化Application类
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//配置imageLoader
ImageLoaderUtil.init(this);
}
}
2. 配置imageLoader的 ImageLoaderUtil.java
package com.util;
import android.content.Context;
import android.graphics.Bitmap;
import com.month.R;
import com.nostra13.universalimageloader.cache.disc.impl.UnlimitedDiscCache;
import com.nostra13.universalimageloader.cache.disc.naming.HashCodeFileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.LruMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.assist.QueueProcessingType;
import com.nostra13.universalimageloader.core.decode.BaseImageDecoder;
import com.nostra13.universalimageloader.core.display.RoundedBitmapDisplayer;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;
import com.nostra13.universalimageloader.core.download.BaseImageDownloader;
import com.nostra13.universalimageloader.utils.StorageUtils;
import java.io.File;
public class ImageLoaderUtil {
/**
* 初始化imageLoader
* @param context
*/
public static void init(Context context) {
//1.获取配置config对象
File cacheDir = StorageUtils.getCacheDirectory(context); //缓存文件夹路径
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
.threadPoolSize(3) // default 线程池内加载的数量
.threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
.diskCache(new UnlimitedDiscCache(cacheDir)) // default 可以自定义缓存路径
.diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
.diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
.imageDownloader(new BaseImageDownloader(context)) // default
.imageDecoder(new BaseImageDecoder(true)) // default
.defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
.writeDebugLogs() // 打印debug log
.build(); //开始构建
//2.初始化配置...ImageLoader.getInstance()图片加载器的对象,单例模式
ImageLoader.getInstance().init(config);
}
/**
* imageLoader加载图片的默认选项
* @return
*/
public static DisplayImageOptions getDefaultOption(){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.app) // 设置图片下载期间显示的默认图片
.showImageForEmptyUri(R.drawable.app) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.app) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
.displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.build();
return options;
}
/**
* imageLoader加载圆角图片....指定圆角的大小
* @return
*/
public static DisplayImageOptions getRoundedOption(int corner){
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.app) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.app) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.app) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(1000) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(true) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
.displayer(new RoundedBitmapDisplayer(corner)) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.build();
return options;
}
}
3. 判断网络连接的工具类 NetConnectionUtil.java
package com.util;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.provider.Settings;
/**
* 判断网络连接的工具类
*/
public class NetConnectionUtil {
/**
* 判断是否有网络连接的方法
*/
public static boolean isNetConnectioned(Context context){
//1. 获取网络连接对象
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
//2. 获取NetworkInfo对象,获取网络连接的信息
NetworkInfo info = manager.getActiveNetworkInfo();
//3. 信息不为空时,就代表网络可用
if (info != null){
return info.isAvailable();
}
return false;
}
/**
* 网络无连接时跳转页面,弹出对话框进行网络的设置
*/
public static void setNetConnectionWork(final Context context){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("网络加载错误!");
builder.setMessage("网络连接不可用,是否设置网络?");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
//跳转到系统的设置网络的界面
Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
context.startActivity(intent);
}
});
builder.setNegativeButton("取消",null);
builder.show();
}
}
4. 解析json数据的 StringUtil.java
package com.util;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StringUtil {
public static String streamToString(InputStream inputStream, String charset) {
try {
InputStreamReader inputStreamReader = new InputStreamReader(inputStream,charset);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String s = null;
StringBuilder builder = new StringBuilder();
while ((s = bufferedReader.readLine()) != null){
builder.append(s);
}
bufferedReader.close();
return builder.toString();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
九. 自定义布局文件:
1. 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>
2. layout文件夹下的布局文件:
(1)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" >
<android.support.v4.view.ViewPager
android:id="@+id/main_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:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="28dp"
android:layout_alignBottom="@+id/main_ViewPager" ></LinearLayout>
</RelativeLayout>
(2)activity_home.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawerLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<!--主内容区域的视图-->
<FrameLayout
android:id="@+id/frameLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<android.support.design.widget.TabLayout
app:tabTextAppearance="@style/TextStyle"
android:layout_width="match_parent"
app:tabSelectedTextColor="#FF0000"
android:background="#00BFFF"
app:tabIndicatorHeight="0dp"
android:layout_height="60dp"
android:id="@+id/tabLayout"
app:tabTextColor="#000000"
app:tabMode="scrollable"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/home_viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
</LinearLayout>
</FrameLayout>
<!--抽屉展示的布局-->
<RelativeLayout
android:id="@+id/relative"
android:layout_gravity="left"
android:layout_width="250dp"
android:background="#00BFFF"
android:layout_height="match_parent">
<ImageView
android:id="@+id/a"
android:src="@drawable/a"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginLeft="65dp"
android:layout_marginTop="20dp" />
<TextView
android:text="问天"
android:textSize="21sp"
android:id="@+id/text"
android:layout_marginLeft="10dp"
android:layout_marginTop="21dp"
android:layout_toRightOf="@id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ListView
android:divider="#00BFFF"
android:id="@+id/listView"
android:layout_marginTop="50dp"
android:layout_marginLeft="80dp"
android:layout_below="@+id/text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"></ListView>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>
(3)activity_web.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" >
<WebView
android:id="@+id/webView"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
<Button
android:text="收藏此新闻"
android:onClick="shouCang"
android:layout_width="128dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
(4)news_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"
android:orientation="vertical">
<com.handmark.pulltorefresh.library.PullToRefreshListView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/refresh_list_view"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrAnimationStyle="flip"
ptr:ptrHeaderBackground="#383838"
ptr:ptrHeaderTextColor="#FFFFFF" >
</com.handmark.pulltorefresh.library.PullToRefreshListView>
</LinearLayout>
(5)显示收藏页的xml:activity_shoucang.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" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"></ListView> </LinearLayout>
(6)显示收藏的网页布局:activity_show.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" > <WebView android:id="@+id/show_WebView" android:layout_width="match_parent" android:layout_height="match_parent"></WebView> </RelativeLayout>
(7)显示多条目的4种布局:
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="15dp"
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>
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>
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>
only_title.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:textSize="18sp"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<TextView
android:textSize="12sp"
android:id="@+id/author_name"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
(8)显示收藏的多条目网页布局4种:
shoucang_one_item.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/date"
android:layout_marginLeft="10dp"
android:layout_marginTop="15dp"
android:layout_width="match_parent"
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>
shoucang_two_item.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="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:padding="10dp">
<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/image01"
android:layout_height="120dp" />
<ImageView
android:layout_weight="1"
android:layout_width="0dp"
android:id="@+id/image02"
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>
<TextView
android:textSize="12sp"
android:id="@+id/date"
android:layout_marginLeft="10dp"
android:layout_marginTop="18dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
shoucang_three_item.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="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:padding="10dp">
<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:id="@+id/image003"
android:layout_height="120dp"
android:layout_marginLeft="3dp"/>
</LinearLayout>
<TextView
android:textSize="12sp"
android:id="@+id/date"
android:layout_marginLeft="10dp"
android:layout_marginTop="18dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
title_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">
<TextView
android:id="@+id/title"
android:textSize="18sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_height="wrap_content"
android:layout_width="match_parent" />
<TextView
android:id="@+id/date"
android:textSize="12sp"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3. values文件夹下的 styles.xml加入下面代码
<style name="TextStyle">
<item name="android:textSize">21sp</item>
</style>
十. AndroidManifest.xml中
1. 加入请求网络数据 ,判断网络状态的权限;
2.声明imageloader的name属性。