Activity---Fragment---listView的实现
我们要做的是在Activity中加入一个ViewPager,利用ViewPager的适配器(继承于FragmentPagerAdapter)将Fragment加到其中,而我们在又在Fragment中又加入了一个ListVIew,这又要一个继承与BaseAdapter的适配器。
当我们滑动ViewPager时,顶栏也联动滑动,这需要一个第三方组件,PagerSlidingTabStrip。导包等一系列步骤暂不说明。
1、首先,建立一个Activity,里面有ViewPager和PagerSlidingTabStrip
代码如下:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity; import com.astuetz.PagerSlidingTabStrip;
import com.example.administrator.homeworepar.Fragment.adapter.MyFragmentAdapter;
import com.example.administrator.homeworepar.Fragment.adapter.PagerFragment;
import com.example.administrator.homeworepar.R; import java.util.ArrayList;
import java.util.List; public class FragmentPagerActivity extends AppCompatActivity {
private ViewPager vp;
private PagerSlidingTabStrip pst;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_pager);
vp= (ViewPager) findViewById(R.id.vp);
pst=(PagerSlidingTabStrip)findViewById(R.id.pst);
List<Fragment> list=new ArrayList<>();
List<String> titles=new ArrayList<>(); //设置顶栏
titles.add("体育");
titles.add("娱乐");
titles.add("财经");
titles.add("国际");
titles.add("奥运");
for(int i=1;i<=5;i++){ //Bundle的作用为在Activity和Fragment中传值
Fragment fragment=new PagerFragment();
Bundle bundle=new Bundle();
bundle.putInt("arg",i);
fragment.setArguments(bundle);
list.add(fragment);
}
MyFragmentAdapter ma=new MyFragmentAdapter( //适配器名称
getSupportFragmentManager(),list,titles);
vp.setAdapter(ma);
pst.setIndicatorColor(getResources().getColor(R.color.colorPrimary)); //顶栏的各种属性
pst.setIndicatorHeight(3);
pst.setUnderlineColor(getResources().getColor(R.color.colorAccent));
pst.setTextColor(getResources().getColor(R.color.colorPrimary));
pst.setDividerColor(getResources().getColor(R.color.color1));
//pst.setShouldExpand(true); 当标题过少时,可以设置标题均分标题栏
// pst.setTabBackground(5); pst.setViewPager(vp);
}
}
MyFragmentAdapter 适配器
把Fragment放到ViewPager
public class MyFragmentAdapter extends FragmentPagerAdapter {
private List<Fragment> list;
private List<String> titles;
public MyFragmentAdapter(FragmentManager fm,List<Fragment> list,List<String> titles) {
super(fm);
this.list=list;
this.titles=titles;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
@Override
public CharSequence getPageTitle(int position) {
return titles.get(position);
}
}
再把ListView放到Fragment中,Fragment中建立一个ListView,在ListView中放一个NewsOne类,
还需要一个适配器,扩展BaseAdapter,作用是把新闻类数据传到ListView中
Fragment中的代码如下:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.example.administrator.homeworepar.R;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
*/
public class PagerFragment extends Fragment {
public PagerFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_pager, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
ListView lv= (ListView) getView().findViewById(R.id.lv);
List<NewsOne> list=new ArrayList<>(); //将新闻类放到Fragment中
MyListViewAdapter ma=new MyListViewAdapter(list,getActivity());
lv.setAdapter(ma);
Bundle bundle=getArguments();
if(bundle!=null){
int arg= bundle.getInt("arg");
switch (arg){
case 1: //将Bundle传来的值得到,设置五个左右滑动的页面
for(int i=1;i<20;i++){
list.add(new NewsOne(R.mipmap.image12,"刚刚","体育新闻"+i));
}
ma.notifyDataSetChanged();
break;
case 2:
for(int i=1;i<20;i++){
list.add(new NewsOne(R.mipmap.image12,"刚刚","奥运集锦"+i));
}
ma.notifyDataSetChanged();
break;
case 3:
for(int i=1;i<20;i++){
list.add(new NewsOne(R.mipmap.image12,"刚刚","国际新闻"+i));
}
ma.notifyDataSetChanged();
break;
case 4:
for(int i=1;i<20;i++){
list.add(new NewsOne(R.mipmap.image12,"刚刚","财经新闻"+i));
}
ma.notifyDataSetChanged();
break;
case 5:
for(int i=1;i<20;i++){
list.add(new NewsOne(R.mipmap.image12,"刚刚","国内新闻"+i));
}
ma.notifyDataSetChanged();
break;
}
}
}
}
名为MyListViewAdapter的适配器,作用是将News类加到Fragment中
package com.example.administrator.homeworepar.Fragment.adapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.example.administrator.homeworepar.R;
import java.util.List;
/**
* Created by Administrator on 2016/8/9.
*/
public class MyListViewAdapter extends BaseAdapter {
private List<NewsOne> list;
private Context context;
public MyListViewAdapter(List<NewsOne> 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 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder vh;
if(convertView==null){
vh=new ViewHolder();
convertView= LayoutInflater.from(context).inflate(R.layout.list_layout,null);
vh.img=(ImageView)convertView.findViewById(R.id.img);
vh.title=(TextView)convertView.findViewById(R.id.title);
vh.pubdate=(TextView)convertView.findViewById(R.id.pubDate);
convertView.setTag(vh);
}else{
vh=(ViewHolder)convertView.getTag();
}
NewsOne newsOne=list.get(position);
vh.img.setImageResource(newsOne.getImg());
vh.title.setText(newsOne.getTitle());
vh.pubdate.setText(newsOne.getPubDate());
return convertView;
}
private class ViewHolder{
ImageView img;
TextView title;
TextView pubdate;
}
}
Activity---Fragment---listView的实现的更多相关文章
- activity+fragment+listview+adapter+bean在同一个类中的套路
1.xml activity_main.xml <?xml version="1.0" encoding="utf-8"?><FrameLay ...
- Android:Activity+Fragment及它们之间的数据交换.
Android:Activity+Fragment及它们之间的数据交换 关于Fragment与Fragment.Activity通信的四种方式 比较好一点的Activity+Fragment及它们之间 ...
- Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复
Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...
- [转]Android:Activity+Fragment及它们之间的数据交换(一)
2014-05-18 来源:Android:Activity+Fragment及它们之间的数据交换(一) 简介: 为什么要用Fragment?使用Fragment可以在一个Acti ...
- 在Activity/Fragment以外使用Toast【转】
在 Activity 使用 Toast 这种是最基本的使用,Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity. public ...
- Fragment 回退栈 传递参数,点击切换图片使用Fragment ListView
Fragment回退栈 类似与Android系统为Activity维护一个任务栈,我们也可以通过Activity维护一个回退栈来保存每次Fragment事务发生的变化. 如果你将Fragment任务 ...
- Android -- Activity,Fragment lifecycle
Activity Lifecyce Fragment Lifecycle: 程序运行: 09-16 13:59:22.883 19022-19022/com.example.android.archi ...
- androidannotation study(1)---Activity, Fragment,Custom Class & Custom View
androidannotation 是github上的一个开源项目. 主要是注解机制,可以改善android写代码的效率. Activity 使用 1.@EActivity 注解 可想而知,servi ...
- Data binding 在Activity,Fragment中引用以及加载其他布局
Data binding在Activity中使用: DataBindingUtil.setContentView(this, R.layout.activity_home); Data binding ...
- Android应用开发:LoaderManager在Activity/Fragment中的使用分析
LoaderManager 外部接口initLoader:起始 public <D> Loader<D> initLoader(int id, Bundle args, Loa ...
随机推荐
- 【技术贴】解决127.0.0.1和http://localhost均被拦截跳转到另一个网页
很艰难的历程. 今天安装一个OA系统,要用到http://127.0.0.1输入完成之后,可以进入安装界面,but,我输入完了之后,自动跳到了129129垃圾网站,艹,我真TM服了,我把本地连接网线都 ...
- MYSQLl防注入
1.简单sql防注入 简述: 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 在某些表单中,用户输入的内容直接用来构造(或 ...
- CSS实现文字竖排 DIV CSS文字垂直竖列排版显示如何实现?
DIV CSS实现文字竖排排版显示兼容各大浏览器,让文字垂直竖列排版布局. 有时我们需要一段文字进行从上到下竖列排版,我们知道CSS样式中有一样式可以让其竖列排版,但所有浏览器不全兼容,逼不得已放弃. ...
- SQLite: sqlite_master
SQLite数据库中一个特殊的名叫 SQLITE_MASTER 上执行一个SELECT查询以获得所有表的索引.每一个 SQLite 数据库都有一个叫 SQLITE_MASTER 的表, 它定义数据库的 ...
- lambda -- Filter Java Stream to 1 and only 1 element
up vote10down votefavorite I am trying to use Java 8 Streams to find elements in a LinkedList. I wan ...
- Maven学习(2) - Maven构建多模块Java工程
概述 项目开发时,通常会将项目分为多个模块进行开发,本文讨论如何用Maven构建多模块的Java工程. 软件环境 Java:1.6.0_26 Maven:3.1.1 OS:WindowXP SP3 项 ...
- 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- unity3d Realistic eye shading 真实的眼睛渲染
先放上效果 人皮都做了,当然要来研究下眼睛,眼睛要比人体皮肤简单一些(实时模拟人皮在此) 一看是不是很复杂 这是眼睛的解构,但是,我们只需要模拟出虹膜巩膜和角膜就能达到相当真实的眼睛 巩膜就是白眼球 ...
- [回顾]SVE回顾
SVE回顾 写完后的自评:书写太过凌乱,基本无法阅读. 前几日,SVE通过了TR5,虽说是一个小得不能再小的项目,即使到最后也存在一些未能解决的问题,但在用户的通融下还是在超期一段时间后写下了一个暂时 ...
- Poj 2887-Big String Splay
题目:http://poj.org/problem?id=2887 Big String Time Limit: 1000MS Memory Limit: 131072K Total ...