需需要关联的jar包
com.android.support:design:28.0.0
com.google.code.gson:gson:2.8.5
com.nostra13.universalimageloader:universal-image-loader:1.9.5
关联一个 xListView类
下面直接上代码
依旧先写xml里面的
activity_main
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/Draw_Layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--页面有两个布局,一个是侧滑菜单的,一个主页面的-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<FrameLayout
android:id="@+id/FragmentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</RelativeLayout>
<LinearLayout
android:id="@+id/Zuo_Layout"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@color/colorPrimary"
android:orientation="vertical">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="LOUIS VUITTON" />
<TextView
android:id="@+id/xListView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="单一页面展示"
android:textSize="26dp"/>
<TextView
android:id="@+id/Tab_Layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="切换页面展示"
android:textSize="26dp"/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
Fragment里面的xml
第一个
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".fragment.AFragment">
<com.example.xlistviewflush.view.XListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/X_ListView"></com.example.xlistviewflush.view.XListView>
</LinearLayout>
第二个
<?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"
tools:context=".fragment.BFragment">
<android.support.design.widget.TabLayout
android:id="@+id/Bfrg_Tab"
android:layout_width="match_parent"
android:layout_height="wrap_content">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/Bfrg_Page"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/Bfrg_Tab"></android.support.v4.view.ViewPager>
</RelativeLayout>
两种xlistview布局
第一种
<?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="horizontal">
<ImageView
android:id="@+id/Img_One"
android:layout_width="100dp"
android:layout_height="100dp" />
<TextView
android:id="@+id/Title_One"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22sp"
android:textColor="#000"/>
</LinearLayout>
第二种
<?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="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/Title_Two"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:textColor="#000"
android:textSize="24sp" />
<ImageView
android:id="@+id/Img_Two"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_alignParentRight="true" />
</RelativeLayout>
</LinearLayout>
menu里面的 写TabLayout一定要写
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/Item_One"
android:title="上下拉加载"
/>
<group android:id="@+id/group1">
<item
android:id="@+id/Item_Two"
android:title="左右切换布局" />
</group>
</menu>
下面就是Java代码
首先是适配器的我把圆形图也加进去了
package com.example.weektwoexercise.adapter;
import android.content.Context;
import android.graphics.Bitmap;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.weektwoexercise.R;
import com.example.weektwoexercise.bean.MyData;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.display.CircleBitmapDisplayer;
import java.util.ArrayList;
public class MyAdapter extends BaseAdapter {
private final int Item_One = 0;
private final int Item_Two = 1;
private Context context;
private ArrayList<MyData.DataBean> datas;
private DisplayImageOptions mDisImageOp;
private ImageLoader imageLoader = ImageLoader.getInstance();
public MyAdapter(Context context, ArrayList<MyData.DataBean> datas) {
this.context = context;
this.datas = datas;
//显示圆角图片
mDisImageOp = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.ic_launcher)
.showImageForEmptyUri(R.mipmap.ic_launcher)
.showImageOnFail(R.drawable.ic_launcher)
.cacheInMemory(true)
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.ARGB_8888) //设置图片的解码类型
.displayer(new CircleBitmapDisplayer())//加载圆角图片
.build();
}
public ArrayList<MyData.DataBean> getDatas() {
return datas;
}
public void setDatas(ArrayList<MyData.DataBean> datas) {
this.datas = datas;
notifyDataSetChanged();
}
@Override
public int getCount() {
return datas.size();
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderOne one = null;
HolderTwo two = null;
int type = getItemViewType(position);
MyData.DataBean dataBean = datas.get(position);
if (type == Item_One){
if (convertView == null){
convertView = View.inflate(context , R.layout.item_one , null);
one = new HolderOne();
one.iv_img = convertView.findViewById(R.id.Img_One);
one.tv_Title = convertView.findViewById(R.id.Title_One);
convertView.setTag(one);
}else{
one = (HolderOne) convertView.getTag();
}
one.tv_Title.setText(dataBean.getTitle()+"");
imageLoader.displayImage(dataBean.getThumbnail_pic_s(),one.iv_img,mDisImageOp);
}else if (type == Item_Two){
if (convertView == null){
convertView = View.inflate(context , R.layout.item_two , null);
two = new HolderTwo();
two.iv_img = convertView.findViewById(R.id.Img_Two);
two.tv_Title = convertView.findViewById(R.id.Title_Two);
convertView.setTag(two);
}else{
two = (HolderTwo) convertView.getTag();
}
two.tv_Title.setText(dataBean.getTitle()+"");
imageLoader.displayImage(dataBean.getThumbnail_pic_s(),two.iv_img,mDisImageOp);
}
return convertView;
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (position % 2 == 0) {
return Item_One;
} else {
return Item_Two;
}
}
class HolderOne {
ImageView iv_img;
TextView tv_Title;
}
class HolderTwo {
ImageView iv_img;
TextView tv_Title;
}
}
bean包里面的
package com.example.weektwoexercise.bean;
import java.util.List;
public class MyData {
private String msg;
private int code;
private List<DataBean> data;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public List<DataBean> getData() {
return data;
}
public void setData(List<DataBean> data) {
this.data = data;
}
public static class DataBean {
private String uniquekey;
private String title;
private String date;
private String category;
private String author_name;
private String url;
private String thumbnail_pic_s;
private String thumbnail_pic_s02;
private String thumbnail_pic_s03;
public String getUniquekey() {
return uniquekey;
}
public void setUniquekey(String uniquekey) {
this.uniquekey = uniquekey;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
public String getCategory() {
return category;
}
public void setCategory(String category) {
this.category = category;
}
public String getAuthor_name() {
return author_name;
}
public void setAuthor_name(String author_name) {
this.author_name = author_name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getThumbnail_pic_s() {
return thumbnail_pic_s;
}
public void setThumbnail_pic_s(String thumbnail_pic_s) {
this.thumbnail_pic_s = thumbnail_pic_s;
}
public String getThumbnail_pic_s02() {
return thumbnail_pic_s02;
}
public void setThumbnail_pic_s02(String thumbnail_pic_s02) {
this.thumbnail_pic_s02 = thumbnail_pic_s02;
}
public String getThumbnail_pic_s03() {
return thumbnail_pic_s03;
}
public void setThumbnail_pic_s03(String thumbnail_pic_s03) {
this.thumbnail_pic_s03 = thumbnail_pic_s03;
}
}
}
Fragment适配器
package com.example.weektwoexercise.pageadapter;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
public class MyPageAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> mdatas;
private ArrayList<String> mlists;
public MyPageAdapter(FragmentManager fm, ArrayList<Fragment> datas, ArrayList<String> lists) {
super(fm);
this.mdatas = datas;
this.mlists = lists;
}
@Override
public Fragment getItem(int i) {
return mdatas.get(i);
}
@Override
public int getCount() {
return mdatas.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mlists.get(position);
}
}
fragment第一个
package com.example.weektwoexercise.fragment;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.weektwoexercise.R;
import com.example.weektwoexercise.adapter.MyAdapter;
import com.example.weektwoexercise.bean.MyData;
import com.example.weektwoexercise.utils.HttpUtils;
import com.example.xlistviewflush.view.XListView;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.Date;
/**
* A simple {@link Fragment} subclass.
*/
public class AFragment extends Fragment implements XListView.IXListViewListener{
private Context context;
private String mUrl = "http://www.xieast.com/api/news/news.php?page=";
private int index = 1;
private ArrayList<MyData.DataBean> datas = new ArrayList<>();
private MyAdapter adapter ;
private XListView xListView;
public AFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//引入视图
View v = inflater.inflate(R.layout.fragment_a, null);
//创建一个上下文对象
context = getActivity().getApplicationContext();
//查找控件
initView(v);
//创建适配器
adapter = new MyAdapter(context,datas);
//设置适配器
xListView.setAdapter(adapter);
//初始化数据
new MyTask().execute(mUrl+index);
return v;
}
private void initView(View v) {
xListView = v.findViewById(R.id.X_ListView);
xListView.setPullLoadEnable(true);
//给XListView 设置监听事件
xListView.setXListViewListener(this);
}
@Override
public void onRefresh() {
datas.clear();
index = 1;
new MyTask().execute(mUrl+index);
stop();
}
@Override
public void onLoadMore() {
new MyTask().execute(mUrl+(++index));
}
//实现异步加载
class MyTask extends AsyncTask<String , Void , ArrayList<MyData.DataBean>>{
@Override
protected ArrayList<MyData.DataBean> doInBackground(String... strings) {
String jsonStr = HttpUtils.getStr(strings[0]);
//gson解析
Gson gson = new Gson();
MyData myData = gson.fromJson(jsonStr, MyData.class);
return (ArrayList<MyData.DataBean>) myData.getData();
}
@Override
protected void onPostExecute(ArrayList<MyData.DataBean> dataBeans) {
super.onPostExecute(dataBeans);
datas.addAll(dataBeans);
//刷新适配器
adapter.notifyDataSetChanged();
//进行刷新动画的停止
stop();
}
}
private void stop() {
//停止上拉刷新
xListView.stopRefresh();
//停止下拉架子啊
xListView.stopLoadMore();
//显示时间
Date date = new Date();
String dateStr = (String) android.text.format.DateFormat.format("EEEE, MMMM dd日, yyyy kk:mm:ss", date);
xListView.setRefreshTime(dateStr);
}
}
第二个
package com.example.weektwoexercise.fragment;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
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 com.example.weektwoexercise.R;
import com.example.weektwoexercise.pageadapter.MyPageAdapter;
import java.util.ArrayList;
/**
* A simple {@link Fragment} subclass.
*/
public class BFragment extends Fragment {
private View v;
private ArrayList<Fragment> datas = new ArrayList<>();
private ArrayList<String> lists = new ArrayList<>();
private TabLayout Bfrg_Tab;
private ViewPager Bfrg_Page;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// 引入视图
v = inflater.inflate(R.layout.fragment_b, null);
//初始化数据
initData();
//查找控件
initView();
return v;
}
//查找控件
private void initView() {
Bfrg_Tab = v.findViewById(R.id.Bfrg_Tab);
Bfrg_Page = v.findViewById(R.id.Bfrg_Page);
//Fragment 嵌套Fragment
Bfrg_Page.setAdapter(new MyPageAdapter(getChildFragmentManager(),datas,lists));
Bfrg_Tab.setupWithViewPager(Bfrg_Page);
}
//初始化fragment
private void initData() {
datas.add(new AFragment());
datas.add(new AFragment());
lists.add("新闻");
lists.add("LOL");
}
}
application
package com.example.weektwoexercise.MyApp;
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
public class MyApplica extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration imageLoaderConfiguration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(imageLoaderConfiguration);
}
}
解析工具类
package com.example.weektwoexercise.utils;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class HttpUtils {
public static String getStr(String mUrl){
try {
URL url = new URL(mUrl);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream stream = connection.getInputStream();
String jsons = getStream(stream);
return jsons;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private static String getStream(InputStream stream) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuffer sb = new StringBuffer();
String con = "";
while((con = reader.readLine())!=null){
sb.append(con);
}
reader.close();
return sb.toString();
}
}
activity里面的
package com.example.weektwoexercise;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import com.example.weektwoexercise.fragment.AFragment;
import com.example.weektwoexercise.fragment.BFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private TextView xListView;
private TextView Tab_Layout;
private FragmentManager manager;
private DrawerLayout Draw_Layout;
private AFragment aFragment;
private BFragment bFragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化Fragment页面
initData();
initView();
}
private void initData() {
aFragment = new AFragment();
bFragment = new BFragment();
}
private void initView() {
xListView = (TextView) findViewById(R.id.xListView);
xListView.setOnClickListener(this);
Tab_Layout = (TextView) findViewById(R.id.Tab_Layout);
Tab_Layout.setOnClickListener(this);
Draw_Layout = (DrawerLayout) findViewById(R.id.Draw_Layout);
manager = getSupportFragmentManager();
}
@Override
public void onClick(View v) {
//进行判断
switch (v.getId()){
case R.id.xListView:
manager.beginTransaction().replace(R.id.FragmentLayout,aFragment).commit();
Draw_Layout.closeDrawers();
break;
case R.id.Tab_Layout:
manager.beginTransaction().replace(R.id.FragmentLayout,bFragment).commit();
Draw_Layout.closeDrawers();
break;
}
}
}
需要加入的权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
application需要在清单文件中注册
android:name=“com.example.weektwoexercise.MyApp.MyApplica”