使用Tablayout前需要添加依赖design.25.3.1
<?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" xmlns:app="http://schemas.android.com/apk/res-auto"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="60dp" android:id="@+id/tab_layout" app:tabGravity="center" app:tabMode="scrollable" app:tabIndicatorColor="#ff0000" app:tabTextColor="#000000" app:tabSelectedTextColor="#ff0000" app:tabTextAppearance="@style/tablayout_textsize" ></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/fragNews_viewpager" ></android.support.v4.view.ViewPager> </LinearLayout>
代码里面 ,,点击tablayout 给另一个Fragment传值
public class Fragment_News extends Fragment{ private ViewPager viewPager; private TabLayout tabLayout; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_news, container, false); viewPager = (ViewPager) view.findViewById(R.id.fragNews_viewpager); tabLayout = (TabLayout) view.findViewById(R.id.tab_layout); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); final List<String> listtab = new ArrayList<>(); //福利、Android、iOS、休息视频、拓展资源、前端、all listtab.add("福利"); listtab.add("Android"); listtab.add("iOS"); listtab.add("休息视频"); listtab.add("拓展资源"); listtab.add("前端"); listtab.add("all"); //设置适配器,设置tablayout标题 viewPager.setOffscreenPageLimit(listtab.size()); viewPager.setAdapter(new FragmentPagerAdapter(getChildFragmentManager()) { @Override public CharSequence getPageTitle(int position) { return listtab.get(position); } @Override public Fragment getItem(int position) { Fragment_news_frag fragment_news_frag = new Fragment_news_frag(); Bundle bundle = new Bundle(); bundle.putString("type",listtab.get(position)); fragment_news_frag.setArguments(bundle); return fragment_news_frag; } @Override public int getCount() { return listtab.size(); } });//tablayout和viewpager 联动tabLayout.setupWithViewPager(viewPager); }}
另一个Fragment的布局,,,使用 PullToRefreshListView展示数据的fragment的代码,,接收 tablayout传来的参数,访问网络<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 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: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>
public class Fragment_news_frag extends Fragment{ List<DBean.ResultsBean> list = new ArrayList<>(); int num=1; String type; String encode; private PullListAdapter pullListAdapter; private PullToRefreshListView refreshListView; private ILoadingLayout startLabels; private ILoadingLayout endLabels; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_news_frag, container, false); refreshListView = (PullToRefreshListView) view.findViewById(R.id.refresh_list_view); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Bundle bundle = getArguments(); type = bundle.getString("type", "福利"); //转码 try { encode = URLEncoder.encode(type, "utf-8"); } catch (Exception e) { e.printStackTrace(); } getData(); //设置模式 refreshListView.setMode(PullToRefreshBase.Mode.BOTH); startLabels = refreshListView.getLoadingLayoutProxy(true, false); startLabels.setPullLabel("下拉刷新"); startLabels.setRefreshingLabel("正在拉"); startLabels.setReleaseLabel("放开刷新"); endLabels = refreshListView.getLoadingLayoutProxy(false, true); endLabels.setPullLabel("上拉刷新"); endLabels.setRefreshingLabel("正在载入..."); endLabels.setReleaseLabel("放开刷新..."); //设置监听 refreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ListView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ListView> refreshView) { num++; getDataRefresh(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ListView> refreshView) { num=1; getData(); } }); } private void getData() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String path="http://gank.io/api/data/"+encode+"/10/"+num; try { 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 = streamtoString(inputStream,"utf-8"); Thread.sleep(1500); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); DBean dBean = gson.fromJson(json, DBean.class); if (dBean!=null && dBean.getResults()!=null) { list.addAll(dBean.getResults()); long currentTimeMillis = System.currentTimeMillis(); Date date2= new Date(currentTimeMillis); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); String format = dateFormat.format(date2); //设置刷新的时间 endLabels.setLastUpdatedLabel(format); //停止刷新 refreshListView.onRefreshComplete(); setAdapter(); } } }; asyncTask.execute(); } private void getDataRefresh() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String path="http://gank.io/api/data/"+encode+"/10/"+num; try { 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 = streamtoString(inputStream,"utf-8"); Thread.sleep(1500); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); DBean dBean = gson.fromJson(json, DBean.class); if (dBean!=null && dBean.getResults()!=null) { list.addAll(0,dBean.getResults()); long currentTimeMillis = System.currentTimeMillis(); Date date2= new Date(currentTimeMillis); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); String format = dateFormat.format(date2); //设置刷新的时间 startLabels.setLastUpdatedLabel(format); //停止刷新 refreshListView.onRefreshComplete(); setAdapter(); } } }; asyncTask.execute(); } private void setAdapter() { if (pullListAdapter==null) { pullListAdapter = new PullListAdapter(list,getActivity()); refreshListView.setAdapter(pullListAdapter); }else{ pullListAdapter.notifyDataSetChanged(); } } public static String streamtoString(InputStream inputStream, String charset) { try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder builder = new StringBuilder(); String s = null; while((s = bufferedReader.readLine())!=null){ builder.append(s); } bufferedReader.close();; return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } }
下拉刷新上拉加载的PullToRefreshListView的适配器
public class PullListAdapter extends BaseAdapter{ int IMAGE = 0; int TEXT = 1; List<DBean.ResultsBean> list; Context context; public PullListAdapter(List<DBean.ResultsBean> list, Context context) { this.list = list; this.context = context; } @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 2; } @Override public int getItemViewType(int position) { if (list.get(position).getImages()!=null){ return IMAGE; } return TEXT; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (getItemViewType(position)==IMAGE){ //如果返回IMAGE ImageHolder holder; if (convertView==null){ convertView = View.inflate(context, R.layout.pull_item2,null); holder = new ImageHolder(); holder.imageView = (ImageView) convertView.findViewById(R.id.pull_image); holder.textView = (TextView) convertView.findViewById(R.id.pull_text); convertView.setTag(holder); }else{ holder = (ImageHolder) convertView.getTag(); } holder.textView.setText(list.get(position).getDesc()); ImageLoader.getInstance().displayImage(list.get(position).getImages().get(0),holder.imageView, ImageLoaderUtil.getDefautOption()); }else if (getItemViewType(position)==TEXT){ //如果返回TEXT TextHolder holder; if (convertView==null){ convertView = View.inflate(context, R.layout.pull_item1,null); holder = new TextHolder(); holder.textView = (TextView) convertView.findViewById(R.id.pull_text); convertView.setTag(holder); }else{ holder = (TextHolder) convertView.getTag(); } holder.textView.setText(list.get(position).getDesc()); } return convertView; } class ImageHolder{ ImageView imageView; TextView textView; } class TextHolder{ TextView textView; } }
上面是无限轮播图 下面是gridview 可以下拉刷新加载
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="3" > <android.support.v4.view.ViewPager android:background="#ff0000" android:id="@+id/gridview_viewpager" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager> 这是小圆点的布局, 小圆点需要在drawable下面建立shape01.xml<?xml version="1.0" encoding="utf-8"?> 没选中的小圆点 <shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp"/> <size android:height="10dp" android:width="10dp"/> <solid android:color="#000000"/> </shape> 选中的小圆点<shape xmlns:android="http://schemas.android.com/apk/res/android"> <corners android:radius="5dp"/> <size android:height="10dp" android:width="10dp"/> <solid android:color="#ff0000"/> </shape>
<LinearLayout
android:layout_width="100dp"
android:layout_height="50dp"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:id="@+id/gridview_linearshape"
></LinearLayout>
</RelativeLayout>
<com.handmark.pulltorefresh.library.PullToRefreshGridView
xmlns:ptr="http://schemas.android.com/apk/res-auto"
android:id="@+id/pull_refresh_grid"
android:layout_height="0dp"
android:layout_weight="5"
android:layout_width="match_parent"
android:numColumns="2"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:columnWidth="100dp"
android:stretchMode="columnWidth"
android:gravity="fill"
ptr:ptrMode="both" />
</LinearLayout>
public class Fragment_GridView extends Fragment{ private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { if (msg.what==0){ int currentItem = viewPager.getCurrentItem(); viewPager.setCurrentItem(currentItem+1); handler.sendEmptyMessageDelayed(0,2000); } } }; private ViewPager viewPager; private LinearLayout linearLayout; private List<ImageView> listshape; private List<String> list; List<MeishiBean.ResultBean.DataBean> listgrid = new ArrayList<>(); private GridViewAdapter gridViewAdapter; private PullToRefreshGridView refreshGridView; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_gridview, container, false); refreshGridView = (PullToRefreshGridView) view.findViewById(R.id.pull_refresh_grid); viewPager = (ViewPager) view.findViewById(R.id.gridview_viewpager); linearLayout = (LinearLayout) view.findViewById(R.id.gridview_linearshape); return view; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //访问数据的方法 getData(); //访问网络图片 list = new ArrayList<>(); list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207203154_yAhxW.thumb.700_0.jpeg"); list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204451_vUxdK.thumb.700_0.jpeg"); list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207204612_khkBv.thumb.700_0.jpeg"); list.add("https://b-ssl.duitang.com/uploads/item/201502/07/20150207205514_uMz5u.thumb.700_0.jpeg"); list.add("https://b-ssl.duitang.com/uploads/item/201502/10/20150210133942_AaJ8R.thumb.700_0.jpeg"); initShape(); LuoBoAdapter luoBoAdapter = new LuoBoAdapter(list, getActivity()); viewPager.setAdapter(luoBoAdapter); viewPager.setCurrentItem(100000); handler.sendEmptyMessageDelayed(0,2000); refreshGridView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<GridView>() { @Override public void onPullDownToRefresh(final PullToRefreshBase<GridView> refreshView) { long currentTimeMillis = System.currentTimeMillis(); Date date2= new Date(currentTimeMillis); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); String format = dateFormat.format(date2); //设置刷新的时间 refreshView.setLastUpdatedLabel(format); getDataRefresh(); } @Override public void onPullUpToRefresh(PullToRefreshBase<GridView> refreshView) { long currentTimeMillis = System.currentTimeMillis(); Date date2= new Date(currentTimeMillis); SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm"); String format = dateFormat.format(date2); //设置刷新的时间 refreshView.setLastUpdatedLabel(format); getData(); } }); viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { for (int i = 0; i <listshape.size() ; i++) { if (i==position%listshape.size()){ listshape.get(i).setImageResource(R.drawable.shape02); }else{ listshape.get(i).setImageResource(R.drawable.shape01); } } } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); } private void getDataRefresh() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3"; try { 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 = streamtoString(inputStream,"utf-8"); Thread.sleep(1500); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); MeishiBean meishibean = gson.fromJson(json, MeishiBean.class); if (meishibean!=null && meishibean.getResult().getData()!=null) { listgrid.addAll(0,meishibean.getResult().getData()); //停止刷新 refreshGridView.onRefreshComplete(); setAdapter(); } } }; asyncTask.execute(); } private void getData() { AsyncTask<Void, Void, String> asyncTask = new AsyncTask<Void, Void, String>() { @Override protected String doInBackground(Void... params) { String path="http://apis.juhe.cn/cook/query?key=b0eeae4ccd73cce88a8d78e60c64d61c&menu=%E8%A5%BF%E7%BA%A2%E6%9F%BF&rn=10&pn=3"; try { 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 = streamtoString(inputStream,"utf-8"); Thread.sleep(1500); return json; } } catch (Exception e) { e.printStackTrace(); } return ""; } @Override protected void onPostExecute(String json) { Gson gson = new Gson(); MeishiBean meishibean = gson.fromJson(json, MeishiBean.class); if (meishibean!=null && meishibean.getResult().getData()!=null) { listgrid.addAll(meishibean.getResult().getData()); //停止刷新 refreshGridView.onRefreshComplete(); setAdapter(); } } }; asyncTask.execute(); }http://write.blog.csdn.net/postedit private void setAdapter() { if (gridViewAdapter==null) { gridViewAdapter = new GridViewAdapter(listgrid, getActivity()); refreshGridView.setAdapter(gridViewAdapter); }else{ gridViewAdapter.notifyDataSetChanged(); } } 初始化小圆点 private void initShape() { listshape = new ArrayList<>(); //清空布局和集合 linearLayout.removeAllViews(); listshape.clear(); for (int i = 0; i < list.size(); i++) { ImageView imageView = new ImageView(getActivity()); if (i == 0) { imageView.setImageResource(R.drawable.shape02); } else { imageView.setImageResource(R.drawable.shape01); } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(5, 0, 5, 0); ///添加到集合和布局里 listshape.add(imageView); linearLayout.addView(imageView, layoutParams); } } public static String streamtoString(InputStream inputStream, String charset) { try { InputStreamReader inputStreamReader = new InputStreamReader(inputStream, charset); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder builder = new StringBuilder(); String s = null; while((s = bufferedReader.readLine())!=null){ builder.append(s); } bufferedReader.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } }