注意 导依赖
权限
功能一 和功能二 同类题在此功能一不予展示
Mainactivity 侧拉 各功能切换
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.LinearLayout;
import android.widget.TextView;
import com.example.week2_moni.fragment.AFragment;
import com.example.week2_moni.fragment.BFragment;
import com.example.week2_moni.fragment.CFragment;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private CFragment cFragment;
private AFragment aFragment;
private BFragment bFragment;
private TextView xListView;
private TextView Tab_Layout;
private LinearLayout Zuo_Layout;
private DrawerLayout Drawer_Layout;
private FragmentManager manager;
private TextView Refresh_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
initView();
}
private void initData() {
aFragment = new AFragment();
bFragment = new BFragment();
cFragment = new CFragment();
}
private void initView() {
xListView = findViewById(R.id.xListView);
xListView.setOnClickListener(this);
Tab_Layout = findViewById(R.id.Tab_Layout);
Tab_Layout.setOnClickListener(this);
Refresh_list = findViewById(R.id.Refresh_list);
Refresh_list.setOnClickListener(this);
Zuo_Layout = findViewById(R.id.Zuo_Layout);
Drawer_Layout = findViewById(R.id.Drawer_Layout);
manager = getSupportFragmentManager();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.xListView:
manager.beginTransaction().replace(R.id.FrameLayout, aFragment).commit();
Drawer_Layout.closeDrawers();
break;
case R.id.Tab_Layout:
manager.beginTransaction().replace(R.id.FrameLayout, bFragment).commit();
Drawer_Layout.closeDrawers();
break;
case R.id.Refresh_list:
manager.beginTransaction().replace(R.id.FrameLayout, cFragment).commit();
Drawer_Layout.closeDrawers();
break;
}
}
}
主页面布局
<?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">
<!--整个屏幕展示-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/FrameLayout"/>
</RelativeLayout>
<!--侧拉菜单-->
<LinearLayout
android:layout_width="200dp"
android:layout_height="match_parent"
android:id="@+id/Zuo_Layout"
android:orientation="vertical"
android:layout_gravity="start"
android:background="@color/colorPrimary"
>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher_round"
android:layout_gravity="center_horizontal"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/Refresh_list"
android:layout_marginTop="20dp"
android:text="上拉下拉"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:id="@+id/xListView"
android:text="xListView多布局"
android:layout_marginTop="20dp"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:layout_gravity="center_horizontal"
android:id="@+id/Tab_Layout"
android:text="TabLayout"
/>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
Fragment 功能二 多布局+Refresh+LoadMore
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.week2_moni.R;
import com.example.week2_moni.adapter.MyAdapter;
import com.example.week2_moni.bean.MyData;
import com.example.week2_moni.utils.HttpUtils;
import com.example.xlistviewflush.view.XListView;
import com.google.gson.Gson;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class AFragment extends Fragment implements XListView.IXListViewListener {
private String mUrl = "http://www.xieast.com/api/news/news.php?page=";
private ArrayList<MyData.DataBean> data = new ArrayList<>();
private XListView X_ListView;
private MyAdapter mAdapter;
private int i = 1;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_a, null);
initView(v);
mAdapter = new MyAdapter(data, getActivity().getApplicationContext());
X_ListView.setAdapter(mAdapter);
new MyTask().execute(mUrl + i);
return v;
}
private void initView(View v) {
X_ListView = v.findViewById(R.id.X_ListView);
X_ListView.setPullLoadEnable(true);
X_ListView.setXListViewListener(this);
}
@Override
public void onRefresh() {
data.clear();
new MyTask().execute(mUrl + 1);
}
@Override
public void onLoadMore() {
new MyTask().execute(mUrl + (++i));
}
class MyTask extends AsyncTask<String, Void, List<MyData.DataBean>> {
@Override
protected List<MyData.DataBean> doInBackground(String... strings) {
try {
String str = HttpUtils.get(strings[0]);
Gson gson = new Gson();
MyData myData = gson.fromJson(str, MyData.class);
return myData.getData();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(List<MyData.DataBean> dataBeans) {
super.onPostExecute(dataBeans);
data.addAll(dataBeans);
mAdapter.notifyDataSetChanged();
close();
}
}
private void close() {
X_ListView.stopLoadMore();
X_ListView.stopRefresh();
//显示上一次的刷新日期
Date date = new Date();
String dateStr = (String) android.text.format.DateFormat.format("EEEE, MMMM dd日, yyyy kk:mm:ss", date);
X_ListView.setRefreshTime(dateStr);
}
}
多布局适配器
package com.example.week2_moni.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.week2_moni.R;
import com.example.week2_moni.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 ArrayList<MyData.DataBean> mList;
private Context mContext;
private ImageLoader mImageLoader = ImageLoader.getInstance();
private DisplayImageOptions mDisImageOp;
public MyAdapter(ArrayList<MyData.DataBean> mList, Context mContext) {
this.mList = mList;
this.mContext = mContext;
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();
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
HolderOne one = null;
HolderTwo two = null;
int type = getItemViewType(position);
MyData.DataBean dataBean = mList.get(position);
switch (type) {
case ITEM_ONE:
if (convertView == null) {
one = new HolderOne();
convertView = View.inflate(mContext, R.layout.item_one, null);
one.mNameOne = convertView.findViewById(R.id.Item_One_Text);
one.mImageOne = convertView.findViewById(R.id.Item_One_Image);
convertView.setTag(one);
} else {
one = (HolderOne) convertView.getTag();
}
one.mNameOne.setText(dataBean.getTitle() + "");
mImageLoader.displayImage(dataBean.getThumbnail_pic_s(), one.mImageOne, mDisImageOp);
break;
case ITEM_TWO:
if (convertView == null) {
two = new HolderTwo();
convertView = View.inflate(mContext, R.layout.item_two, null);
two.mNameTwo = convertView.findViewById(R.id.Item_Two_Text);
two.mImageTwo = convertView.findViewById(R.id.Item_Two_Image);
convertView.setTag(two);
} else {
two = (HolderTwo) convertView.getTag();
}
two.mNameTwo.setText(dataBean.getTitle() + "");
mImageLoader.displayImage(dataBean.getThumbnail_pic_s(), two.mImageTwo, mDisImageOp);
break;
}
return convertView;
}
//返回条目的类型
@Override
public int getItemViewType(int position) {
//比如正常的接口一般都是有字段判断的 data.getType =1
if (position % 2 == 0) {
return ITEM_ONE;
} else {
return ITEM_TWO;
}
}
@Override
public int getViewTypeCount() {
return 2;
}
class HolderOne {
private TextView mNameOne;
private ImageView mImageOne;
}
class HolderTwo {
private TextView mNameTwo;
private ImageView mImageTwo;
}
}
ImageLoader圆角 必写的类
注意需要注册
import android.app.Application;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
/**
* 你只要写了Application必须要注册如果不注册就会报错
*/
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration imageLoaderConfiguration = ImageLoaderConfiguration.createDefault(this);
ImageLoader.getInstance().init(imageLoaderConfiguration);
}
}
bean包
package com.example.week2_moni.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;
}
}
}
工具类
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 get(String urlStr) throws Exception {
URL url = new URL(urlStr);
//由一个有效的网址服务返回这个对象
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//设置请求方式
connection.setRequestMethod("GET");
connection.setConnectTimeout(5000);
InputStream stream = connection.getInputStream();
String inputStr = getInputStr(stream);
return inputStr;
}
//把流转成字符串
private static String getInputStr(InputStream stream) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(stream));
StringBuffer sb = new StringBuffer();
String str = null;
while ((str = br.readLine()) != null) {
sb.append(str);
}
return sb.toString();
}
}
功能二布局
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.example.xlistviewflush.view.XListView
android:layout_width="match_parent"
android:id="@+id/X_ListView"
android:layout_height="wrap_content"></com.example.xlistviewflush.view.XListView>
</android.support.constraint.ConstraintLayout>
功能三 fragment +tablayout 此功能引用功能二
package com.example.week2_moni.fragment;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
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.week2_moni.R;
import com.example.week2_moni.pageradapter.MyPagerAdapter;
import java.util.ArrayList;
public class BFragment extends Fragment {
private TabLayout Frag_tab;
private ViewPager Frag_Pager;
private ArrayList<Fragment> mList=new ArrayList<>();
private ArrayList<String> mTitle=new ArrayList<>();
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_b, null);
initData();
initView(v);
return v;
}
private void initData() {
mList.add(new AFragment());
mList.add(new AFragment());
mTitle.add("首页");
mTitle.add("新闻");
}
private void initView(View v) {
Frag_tab = (TabLayout) v.findViewById(R.id.Frag_tab);
Frag_Pager = (ViewPager) v.findViewById(R.id.Frag_Pager);
Frag_Pager.setAdapter(new MyPagerAdapter(getChildFragmentManager(),mList,mTitle));
Frag_tab.setupWithViewPager(Frag_Pager);
}
}
对应适配器
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 MyPagerAdapter extends FragmentPagerAdapter {
private ArrayList<Fragment> mList;
private ArrayList<String> mTitle;
public MyPagerAdapter(FragmentManager fm, ArrayList<Fragment> list, ArrayList<String> title) {
super(fm);
this.mList = list;
this.mTitle = title;
}
@Override
public Fragment getItem(int i) {
return mList.get(i);
}
@Override
public int getCount() {
return mList.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mTitle.get(position);
}
}
功能三布局
<?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">
<android.support.design.widget.TabLayout
android:id="@+id/Frag_tab"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/Frag_Pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/Frag_tab"></android.support.v4.view.ViewPager>
</LinearLayout>