//1.上一个页面的值{这是一个Fragment里面写的横向滑动{
//(1.0.TabLayout的用法是在点击项目按F4进入结构设计2.点击上面的Dependencies,点击上面的加号并添加自带的依赖com.android.support:design:28.0.0-alpha1)
注意需要看你Studio的版本 默认是28.0.0 需要修改build里的implementation 'com.android.support:design:26.+'我的是26版本};
public class main2fr02 extends Fragment {
private ArrayList<fruser> frusers;
private TabLayout tab;
private ViewPager vp;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main2fr02, container, false);
vp = view.findViewById(R.id.mainfr02_vp);
tab = view.findViewById(R.id.mainfr02_tab);
return view;
}
//http://api.tianapi.com/?/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page=2
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
chu();
tu tu = new tu(getChildFragmentManager());
vp.setAdapter(tu);
tab.setupWithViewPager(vp);
}
//TabLayout的适配器
class tu extends FragmentPagerAdapter
{
public tu(FragmentManager fm) {
super(fm);
}
//手动写的方法
@Override
public CharSequence getPageTitle(int position) {
return frusers.get(position).getUser();
}
@Override
public Fragment getItem(int position) {
//展示并传值
main202fr01 main202fr01 = new main202fr01();
Bundle bundle = new Bundle();
bundle.putString("geturl1",frusers.get(position).getUrl());
main202fr01.setArguments(bundle);
return main202fr01;
}
@Override
public int getCount() {
return frusers.size();
}
}
//需要传的值
private void chu() {
frusers = new ArrayList<>();
frusers.add(new fruser("社会新闻","social"));
frusers.add(new fruser("VR科技","vr"));
frusers.add(new fruser("IT资讯","it"));
frusers.add(new fruser("娱乐新闻","huabian"));
frusers.add(new fruser("体育新闻","tiyu"));
frusers.add(new fruser("NBA新闻","nba"));
frusers.add(new fruser("足球新闻","football"));
frusers.add(new fruser("科技新闻","keji"));
frusers.add(new fruser("创业新闻","startup"));
frusers.add(new fruser("苹果新闻","apple"));
frusers.add(new fruser("美女图片","meinv"));
frusers.add(new fruser("军事新闻","military"));
frusers.add(new fruser("移动互联","mobile"));
frusers.add(new fruser("旅游资讯","travel"));
frusers.add(new fruser("健康知识","health"));
frusers.add(new fruser("奇闻异事","qiwen"));
}
//1.1TabLayout这个碎片的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<android.support.design.widget.TabLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/mainfr02_tab"
app:tabGravity="center"
app:tabIndicatorColor="#00f"
app:tabMode="scrollable"
app:tabSelectedTextColor="@color/colorPrimaryDark"
app:tabTextColor="@color/colorPrimary"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mainfr02_vp"
></android.support.v4.view.ViewPager>
</LinearLayout>
//2.1 横行滑动里的数值(我的有轮播图和里面的小圆点下面是listview)先是主页面的值 这里上下拉刷新用的是mpulltorefresh 导的是第三封依赖需要的Q我 具体方法再说
public class main202fr01 extends Fragment {
private ArrayList<user.NewslistBean> arrayList;
private ListView lv;
private String geturl1;
private String url;
private int shu;
private int shu01;
private PullToRefreshScrollView pull;
private ViewPager vp;
private ArrayList<String> data;
private LinearLayout xiaoyuandian;
private ArrayList<ImageView> imageViews;
//handler里面的小圆点和图片的自动播放
private Handler handler=new Handler()
{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int cindex=vp.getCurrentItem();
cindex++;
//设置当前页面
vp.setCurrentItem(cindex);
//调用方法
sele(cindex%imageViews.size());
//再次发送消息
sendEmptyMessageDelayed(1,1000);
}
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main202fr01, container, false);
//获得布局和控件
lv = view.findViewById(R.id.main202fr01_lv);
pull = view.findViewById(R.id.pull);
//获取上一个页面传的值
Bundle arguments = getArguments();
geturl1 = arguments.getString("geturl1");
//shu是页面的页数 shu01在用于是否清空数据
shu = 1;
shu01 = 1;
url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
arrayList = new ArrayList<>();
vp = view.findViewById(R.id.main202fr01_vp);
data = new ArrayList<>();
xiaoyuandian = view.findViewById(R.id.xioayuandian);
imageViews = new ArrayList<>();
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//运行方法
new tu().execute(url);
shua();
//这是轮播图的点击移动停止松手在动
vp.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction())
{
case MotionEvent.ACTION_DOWN:
//移除所有的消息,不再自动轮播
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_MOVE:
handler.removeCallbacksAndMessages(null);
break;
case MotionEvent.ACTION_UP:
//再次发送消息
handler.sendEmptyMessageDelayed(1,1000);
break;
case MotionEvent.ACTION_CANCEL:
//再次发送消息
handler.sendEmptyMessageDelayed(1,1000);
break;
}
return false;
}
});
}
//小圆点的判定方法
public void sele(int page)
{
for (int i = 0; i < imageViews.size(); i++) {
if (page==i)
{
imageViews.get(i).setImageResource(R.drawable.xiaoyuanxuan);
}else
{
imageViews.get(i).setImageResource(R.drawable.xiaoyuannoxuan);
}
}
}
//上下拉刷新
private void shua() {
pull.setMode(PullToRefreshBase.Mode.BOTH);
pull.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() {
@Override
public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) {
shu = 1;
shu01 = 2;
url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
new tu().execute(url);
handler.removeMessages(1);
}
@Override
public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) {
shu ++;
shu01 = 1;
url = "http://api.tianapi.com/"+ geturl1 +"/?key=8ec324bf03d34f7706fb4c35a4355d7e&num=10&page="+ shu;
new tu().execute(url);
handler.removeMessages(1);
}
});
}
//异步解析json串用的是HttpURLConnection 的方法 Gson是需要dao包的那种
class tu extends AsyncTask<String,Void,String>
{
@Override
protected String doInBackground(String... strings) {
try {
URL url = new URL(main202fr01.this.url);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setReadTimeout(5000);
urlConnection.setConnectTimeout(5000);
urlConnection.setRequestMethod("GET");
int responseCode = urlConnection.getResponseCode();
if (responseCode==200)
{
InputStream inputStream = urlConnection.getInputStream();
String zhuan = zhuan(inputStream);
return zhuan;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
Gson gson = new Gson();
user user01 = gson.fromJson(s, user.class);
List<user.NewslistBean> newslist = user01.getNewslist();
//给viewpage添加图片 记得加清空每次上下拉都会运行添加的方法
data.clear();
for (int i = 0; i < newslist.size(); i++) {
data.add(newslist.get(i).getPicUrl());
}
//下拉刷新时清空
if (shu01==2)
{
arrayList.clear();
}
arrayList.addAll(newslist);
//这是listview的适配器 等下下面会加
main202myada main202myada = new main202myada(getActivity(), arrayList);
lv.setAdapter(main202myada);
//小圆点随着图片的数量 小圆点我是shap手绘的
imageViews.clear();
xiaoyuandian.removeAllViews();
for (int i = 0; i <data.size() ; i++) {
ImageView imageView = new ImageView(getActivity());
//给小圆点设置右边的间隔
LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT);
params.setMargins(0,0,10,0);
//
if (i==0)
{
imageView.setImageResource(R.drawable.xiaoyuanxuan);
}else
{
imageView.setImageResource(R.drawable.xiaoyuannoxuan);
}
imageViews.add(imageView);
xiaoyuandian.addView(imageView,params);
}
//运行handler
handler.sendEmptyMessageDelayed(1,1000);
vp.setCurrentItem(imageViews.size()*10);
//viewpage的适配器
myada202imagemyada myada202imagemyada = new myada202imagemyada(getActivity(),data);
vp.setAdapter(myada202imagemyada);
pull.onRefreshComplete();
}
}
//把字节流转为字符流
public String zhuan(InputStream inputStream)
{
StringBuilder builder = new StringBuilder();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
String string;
try {
while((string=bufferedReader.readLine())!=null)
{
builder.append(string);
}
} catch (IOException e) {
e.printStackTrace();
}
return builder.toString();
}
//2.2横行滑动里的数值 布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:orientation="vertical">
<com.handmark.pulltorefresh.library.PullToRefreshScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/pull"
ptr:ptrDrawable="@drawable/default_ptr_flip"
ptr:ptrAnimationStyle="flip"
ptr:ptrHeaderBackground="#383838"
ptr:ptrHeaderTextColor="#FFFFFF"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="200dp"
android:id="@+id/main202fr01_vp"
></android.support.v4.view.ViewPager>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/xioayuandian"
android:layout_gravity="bottom"
android:orientation="horizontal"
android:gravity="center"
></LinearLayout>
</FrameLayout>
<com.example.yuekaomoni.bean.mylist
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/main202fr01_lv"
></com.example.yuekaomoni.bean.mylist>
</LinearLayout>
</com.handmark.pulltorefresh.library.PullToRefreshScrollView>
</LinearLayout>
//2.3viewpage的适配器myada202imagemyada
public class myada202imagemyada extends PagerAdapter {
Context context;
ArrayList<String> data;
private final DisplayImageOptions options;
public myada202imagemyada(Context context, ArrayList<String> data) {
this.context = context;
this.data = data;
options = new DisplayImageOptions.Builder()
.cacheInMemory(true)//使用内存缓存
.cacheOnDisk(true)//使用磁盘缓存
.showImageOnLoading(R.mipmap.ic_launcher)//设置正在下载的图片
.showImageForEmptyUri(R.mipmap.ic_launcher)//url为空或请求的资源不存在时
.showImageOnFail(R.mipmap.ic_launcher)//下载失败时显示的图片
.bitmapConfig(Bitmap.Config.RGB_565)//设置图片色彩模式 1px=2字节
.imageScaleType(ImageScaleType.EXACTLY)//设置图片的缩放模式
.build();
}
@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);
ImageLoader.getInstance().displayImage(data.get(position%data.size()),imageView,options);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}
}
//效果图