ViewPager+RadioGroup+Fragment超高仿,可通过左右滑动或点击底部RadioButton切换Fragment,废话不多说,上源码。
下载源码地址:http://download.csdn.net/detail/shenyuanqing/8847959.
首先主视图
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.bwie.mm.MainActivity">
<ListView
android:id="@+id/listview"
android:layout_width="200sp"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:layout_gravity="start"
android:divider="#fff"
android:dividerHeight="1dp"
android:background="#87CEFF"
></ListView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
/>
<RadioGroup
android:id="@+id/rg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_weight="9.5"
>
<RadioButton
android:id="@+id/but1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="首页"
android:gravity="center"
android:button="@null"
android:layout_weight="1"
android:background="@drawable/selector_color"
android:checked="true"
android:padding="10dp"
/>
<RadioButton
android:id="@+id/but2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="行情"
android:gravity="center"
android:button="@null"
android:layout_weight="1"
android:background="@drawable/selector_color"
android:padding="10dp"
/>
<RadioButton
android:id="@+id/but3"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="资讯"
android:gravity="center"
android:button="@null"
android:layout_weight="1"
android:background="@drawable/selector_color"
android:padding="10dp"
/>
<RadioButton
android:id="@+id/but4"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="简介"
android:gravity="center"
android:button="@null"
android:layout_weight="1"
android:background="@drawable/selector_color"
android:padding="10dp"
/>
</RadioGroup>
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
以及主方法
import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.RadioGroup; import com.bwie.adapter.CeLaAdapter; import com.bwie.beans.CeLa; import com.bwie.fragment.Fragment1; import com.bwie.fragment.Fragment2; import com.bwie.fragment.Fragment3; import com.bwie.fragment.Fragment4; import java.util.ArrayList; import java.util.List; /** * Viewpager和Fragment连用 * */ public class MainActivity extends FragmentActivity { private DrawerLayout drawerLayout;//侧拉 private ListView listView;//展示 private List<CeLa> list; private ViewPager viewPager; private RadioGroup radioGroup; private List<Fragment> flist; private Fragment1 fragment1; private Fragment2 fragment2; private Fragment3 fragment3; private Fragment4 fragment4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取资源ID listView=(ListView) findViewById(R.id.listview); drawerLayout=(DrawerLayout) findViewById(R.id.activity_main); viewPager=(ViewPager) findViewById(R.id.viewpager); radioGroup=(RadioGroup) findViewById(R.id.rg); //侧垃集合 list=new ArrayList<CeLa>(); //添加信息 list.add(new CeLa("客服热线",R.mipmap.ic_launcher)); list.add(new CeLa("营业部网点",R.mipmap.ic_launcher)); list.add(new CeLa("系统设置",R.mipmap.ic_launcher)); list.add(new CeLa("换肤",R.mipmap.ic_launcher)); //关联适配器,展示侧拉 CeLaAdapter adapter=new CeLaAdapter(list,MainActivity.this); listView.setAdapter(adapter); //点击条目关闭侧拉 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { drawerLayout.closeDrawer(listView); } }); fragment1=new Fragment1(); fragment2=new Fragment2(); fragment3=new Fragment3(); fragment4=new Fragment4(); //添加fragment flist=new ArrayList<>(); flist.add(fragment1); flist.add(fragment2); flist.add(fragment3); flist.add(fragment4); //适配器 viewPager.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) { return flist.get(position); } @Override public int getCount() { return flist.size(); } }); //viewpager监听事件 viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { //联动 switch (position){ case 0: radioGroup.check(R.id.but1); break; case 1: radioGroup.check(R.id.but2); break; case 2: radioGroup.check(R.id.but3); break; case 3: radioGroup.check(R.id.but4); break; default: break; } } @Override public void onPageScrollStateChanged(int state) { } }); //radioGroup监听事件 radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { //联动 switch (i){ case R.id.but1: viewPager.setCurrentItem(0); break; case R.id.but2: viewPager.setCurrentItem(1); break; case R.id.but3: viewPager.setCurrentItem(2); break; case R.id.but4: viewPager.setCurrentItem(3); break; default: break; } } }); } }
//展示数据的类
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.ListView; import com.bwie.adapter.PullAdapter; import com.bwie.beans.User; import com.bwie.cuidongtao1509a20170922.R; import com.bwie.utils.NetWorksUtils; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.util.List; /**展示数据 * Created by 1 on 2017/9/22. * */ public class ChannelFragment extends Fragment{ private String name; private String new_url; private List<User.NewslistBean> data; private PullAdapter adapter; private PullToRefreshListView plistview; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //接收数据 Bundle bundle=getArguments(); name=(String) bundle.get("ch"); new_url=(String) bundle.get("url"); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.cf,null); //获取资源ID plistview=(PullToRefreshListView) view.findViewById(R.id.pull_refresh_list); PullToRefreshData(); //下拉刷新 plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { PullToRefreshData(); } }); //上拉加载 plistview.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() { @Override public void onLastItemVisible() { LoadMoreData(); } }); return view; } //刷新 public void PullToRefreshData(){ //异步解析 new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { //下拉刷新时页数设置为1 String str=new NetWorksUtils().getJsonJieXi(new_url+"1"); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); User user = gson.fromJson(s, User.class); data = user.getNewslist(); //关联适配器 adapter=new PullAdapter(data,getActivity()); //加载适配器 plistview.setAdapter(adapter); //停止刷新 plistview.onRefreshComplete(); } }.execute(new_url); } //加载 public void LoadMoreData(){ //异步 new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { //上拉加载更多时页数加1, String str=new NetWorksUtils().getJsonJieXi(new_url+"1"); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); User user = gson.fromJson(s, User.class); List<User.NewslistBean> data2 = user.getNewslist(); //加载 data.addAll(data2); //刷新适配器 adapter.notifyDataSetChanged(); } }.execute(new_url); } }
//channelFeagemtn
package com.bwie.fragment; 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.ListView; import com.bwie.adapter.PullAdapter; import com.bwie.beans.User; import com.bwie.cuidongtao1509a20170922.R; import com.bwie.utils.NetWorksUtils; import com.google.gson.Gson; import com.handmark.pulltorefresh.library.PullToRefreshBase; import com.handmark.pulltorefresh.library.PullToRefreshListView; import java.util.List; /**展示数据 * Created by 1 on 2017/9/22.
public class ChannelFragment extends Fragment{ private String name; private String new_url; private List<User.NewslistBean> data; private PullAdapter adapter; private PullToRefreshListView plistview; @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); //接收数据 Bundle bundle=getArguments(); name=(String) bundle.get("ch"); new_url=(String) bundle.get("url"); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.cf,null); //获取资源ID plistview=(PullToRefreshListView) view.findViewById(R.id.pull_refresh_list); PullToRefreshData(); //下拉刷新 plistview.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { PullToRefreshData(); } }); //上拉加载 plistview.setOnLastItemVisibleListener(new PullToRefreshBase.OnLastItemVisibleListener() { @Override public void onLastItemVisible() { LoadMoreData(); } }); return view; } //刷新 public void PullToRefreshData(){ //异步解析 new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { //下拉刷新时页数设置为1 String str=new NetWorksUtils().getJsonJieXi(new_url+"1"); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); User user = gson.fromJson(s, User.class); data = user.getNewslist(); //关联适配器 adapter=new PullAdapter(data,getActivity()); //加载适配器 plistview.setAdapter(adapter); //停止刷新 plistview.onRefreshComplete(); } }.execute(new_url); } //加载 public void LoadMoreData(){ //异步 new AsyncTask<String,Integer,String>(){ @Override protected String doInBackground(String... strings) { //上拉加载更多时页数加1, String str=new NetWorksUtils().getJsonJieXi(new_url+"1"); return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); Gson gson = new Gson(); User user = gson.fromJson(s, User.class); List<User.NewslistBean> data2 = user.getNewslist(); //加载 data.addAll(data2); //刷新适配器 adapter.notifyDataSetChanged(); } }.execute(new_url); } }
第一个fragment的类
import android.os.Bundle; import android.support.annotation.Nullable; import android.support.design.widget.TabLayout; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.R; import java.util.ArrayList; import java.util.List; /**主页面 * 2017/9/22. * */ public class Fragment1 extends Fragment{ private TabLayout tabLayout; private ViewPager viewPager; private String channl[]={"数据新闻","快讯","头条","精编公告","美股","港股","基金","理财"}; private String urlS[]={ "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10", "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10" }; private LayoutInflater mInflater; private List<ChannelFragment> mViewList = new ArrayList<>();//页卡视图集合 @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment1,null); //获取资源ID mInflater=LayoutInflater.from(getActivity()); tabLayout=(TabLayout) view.findViewById(R.id.tabs); viewPager=(ViewPager) view.findViewById(R.id.vp_view); //传数据 for (int i=0;i<channl.length;i++){ //实例化 ChannelFragment channelFragment=new ChannelFragment(); //传值 Bundle bundle=new Bundle(); bundle.putString("ch",channl[i]); bundle.putString("url",urlS[i]); channelFragment.setArguments(bundle); //添加 mViewList.add(channelFragment); //添加标题 tabLayout.addTab(tabLayout.newTab().setText(channl[i])); } FragmentManager manager=getActivity().getSupportFragmentManager(); //关联适配器 MyFragmentPagerAdapter fragmentPagerAdapter=new MyFragmentPagerAdapter(manager,mViewList); viewPager.setAdapter(fragmentPagerAdapter); //将tabLayout,与viewPager关联起来 tabLayout.setupWithViewPager(viewPager); return view; } //适配器 class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<ChannelFragment> mViewList; public MyFragmentPagerAdapter(FragmentManager fm, List<ChannelFragment> mViewList) { super(fm); this.mViewList = mViewList; } @Override public Fragment getItem(int position) { return mViewList.get(position); } @Override public int getCount() { return mViewList.size(); } @Override public CharSequence getPageTitle(int position) { return channl[position];//页卡标题 } } }
//封装的jiavabean
import java.util.List; /**Bean类 * Created by 1 on 2017/9/22. * */ public class User { private int code; private String msg; private List<NewslistBean> newslist; public int getCode() { return code; } public void setCode(int code) { this.code = code; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public List<NewslistBean> getNewslist() { return newslist; } public void setNewslist(List<NewslistBean> newslist) { this.newslist = newslist; } public static class NewslistBean { private String ctime; private String description; private String picUrl; private String title; private String url; public String getCtime() { return ctime; } public void setCtime(String ctime) { this.ctime = ctime; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getPicUrl() { return picUrl; } public void setPicUrl(String picUrl) { this.picUrl = picUrl; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } } }
//侧拉的javabean
/**侧拉 * Created by 1 on 2017/9/22. * */ public class CeLa { private String name; private int image; public CeLa(String name, int image) { this.name = name; this.image = image; } public CeLa() { } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getImage() { return image; } public void setImage(int image) { this.image = image; } @Override public String toString() { return "CeLa{" + "name='" + name + '\'' + ", image=" + image + '}'; } }
//Imageloder的类
package import android.app.Application; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; /**图片加载 * Created by 1 on 2017/9/22. * */ public class MyApp extends Application{ @Override public void onCreate() { super.onCreate(); //通过ImageLoader加载试图 ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(configuration); } }
//加载网络的类
package com.utils; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; /**工具类解析 * Created by 1 on 2017/9/22. * */ public class NetWorksUtils { public String getJsonJieXi(String jsonStr){ URL url=null; HttpURLConnection httpURLConnection=null; String JsonUrl=""; try { //得到网络数据 url=new URL(jsonStr); httpURLConnection=(HttpURLConnection) url.openConnection(); httpURLConnection.setConnectTimeout(5000); httpURLConnection.setReadTimeout(5000); //获取响应码 int responseCode = httpURLConnection.getResponseCode(); if (responseCode==200){ InputStream inputStream = httpURLConnection.getInputStream(); byte[] bytes = new byte[1024]; int len=0; while ((len=inputStream.read(bytes))!=-1){ //解析 JsonUrl +=new String(bytes,0,len); } } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //返回解析内容 return JsonUrl; } }
//fragment1的视图
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabIndicatorColor="@color/colorPrimary" app:tabMode="scrollable" app:tabSelectedTextColor="@color/colorPrimary" app:tabTextColor="@color/black"/> <android.support.v4.view.ViewPager android:id="@+id/vp_view" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
//item1的视图
<?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" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="#ffffff" /> </LinearLayout> </LinearLayout>
//item2的视图
<?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"> <ImageView android:id="@+id/image2" android:layout_width="60dp" android:layout_height="60dp" /> <TextView android:id="@+id/text2" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>
//putofresh的视图
上拉加载下拉刷新
<?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"> <com.handmark.pulltorefresh.library.PullToRefreshListView xmlns:ptr="http://schemas.android.com/apk/res-auto" android:id="@+id/pull_refresh_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:cacheColorHint="#000000" android:divider="#19000000" android:dividerHeight="4dp" android:fadingEdge="none" android:fastScrollEnabled="false" android:footerDividersEnabled="false" android:headerDividersEnabled="false" android:smoothScrollbar="true" ptr:ptrAnimationStyle="rotate" ptr:ptrHeaderTextColor="#ffffff" ptr:ptrHeaderSubTextColor="#00ffff" ptr:ptrHeaderBackground="@null" ptr:ptrDrawable="@mipmap/ic_launcher"/> </LinearLayout>
//两个主要的适配器
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.bwie.beans.CeLa; import com.bwie.R; import java.util.List; /**侧拉适配器 * Created by 1 on 2017/9/22. * */ public class CeLaAdapter extends BaseAdapter{ private List<CeLa> list; private Context context; public CeLaAdapter(List<CeLa> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { //加载视图 view=View.inflate(context, R.layout.item,null); //获取资源id ImageView imageView=(ImageView) view.findViewById(R.id.image); TextView textView=(TextView) view.findViewById(R.id.text); //展示试图 imageView.setImageResource(list.get(i).getImage()); textView.setText(list.get(i).getName()); return view; } }
//刷新的适配器
package com.bwie.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.bwie.beans.User; import com.bwie.cuidongtao1509a20170922.R; import com.nostra13.universalimageloader.core.ImageLoader; import java.util.List; /**上拉下拉适配器 * Created by 1 on 2017/9/22. * */ public class PullAdapter extends BaseAdapter{ private List<User.NewslistBean> list; private Context context; public PullAdapter(List<User.NewslistBean> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { return list.size(); } @Override public Object getItem(int i) { return list.get(i); } @Override public long getItemId(int i) { return i; } @Override public View getView(int i, View view, ViewGroup viewGroup) { //进行优化 ViewHolder viewHolder; if(view==null){ //实例化内部类 viewHolder=new ViewHolder(); //加载试图 view=View.inflate(context, R.layout.item2,null); //获取资源ID viewHolder.imageView=(ImageView) view.findViewById(R.id.image2); viewHolder.textView=(TextView) view.findViewById(R.id.text2); view.setTag(viewHolder); }else{ viewHolder=(ViewHolder) view.getTag(); } //ImageLoader展示试图,展示内容 ImageLoader.getInstance().displayImage(list.get(i).getPicUrl(),viewHolder.imageView); viewHolder.textView.setText(list.get(i).getTitle()); return view; } //内部类 class ViewHolder{ ImageView imageView; TextView textView; } }