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;
}
}

				
时间: 2024-10-24 10:09:52

Activity---Fragment---listView的实现的相关文章

Android——ViewPager+Fragment+ListView之间

Android--ViewPager+Fragment+ListView之间 <span style="font-size:18px;">package com.example.jreduch05; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewPager; import android.support.v7.app.A

[转]Android:Activity+Fragment及它们之间的数据交换(一)

2014-05-18         来源:Android:Activity+Fragment及它们之间的数据交换(一)   简介: 为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面.Fragment与 Fragment之间的动画切换,远比Activity与Activity之间的动画切换变化方式多.很多时候,我们通过使用一个Activity,切换 多个Fragment.本次博客,主要列举一下Fragment与它的Activity之间进行数据交换的方式.

在Activity/Fragment以外使用Toast【转】

在 Activity 使用 Toast 这种是最基本的使用,Toast的第一个参数就是Context,一般在Activity中我们直接用this代替,代表调用者的实例为Activity. public class TestDBActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCre

Android Activity Fragment 生命周期

从开源项目中看到 这个,就不由自主的收藏了~ https://github.com/xxv/android-lifecycle Android Activity Fragment 生命周期

Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状态之外, 还需要用户手动保存一些成员变量. Fragment的状态有它自己的实例状态和其中的View状态, 因为其生命周期的灵活性和实际需要的不同, 情况会多一些. 根据源码, 列出了Fragment中实例状态和View状态保存和恢复的几个入口, 便于分析查看. 最后专门讲了WebView状态保存和

Android:Activity+Fragment及它们之间的数据交换(一)

简介: 为什么要用Fragment?使用Fragment可以在一个Activity中实现不同的界面.Fragment与Fragment之间的动画切换,远比Activity与Activity之间的动画切换变化方式多.很多时候,我们通过使用一个Activity,切换多个Fragment.本次博客,主要列举一下Fragment与它的Activity之间进行数据交换的方式. 1.Fragment中通过getActivity()然后进行强制转化,调用Activity中的公有方法 ((XXXXActivit

Fragment 回退栈 传递参数,点击切换图片使用Fragment ListView

Fragment回退栈  类似与Android系统为Activity维护一个任务栈,我们也可以通过Activity维护一个回退栈来保存每次Fragment事务发生的变化. 如果你将Fragment任务添加到回退栈,当用户点击后退按钮时,将看到上一次的保存的Fragment. 一旦Fragment完全从后退栈中弹出,用户再次点击后退键,则退出当前Activity.   transaction.add(R.id.right, rightFragment); transaction.addToBack

ScrollView+Fragment+ListView嵌套ListView,麻麻再也不用担心我不会写嵌套

前言 之前写了一篇文章 android ListView/GridView与ScrollView嵌套的滑动冲突解决 介绍了如何解决ScrollView与AdapterView的嵌套,但是没有给出demo,那是因为那些代码比较多,而且是在手头的项目里,业务逻辑代码比较多,所以第一时间没有分享给大家. 今天终于有空把这些代码全部抽离了出来,并且去掉了业务代码和不必要的内容,以便大家能够更好的学习这个知识. 先贴一个效果图吧: 之前项目里我是使用复写ScrollView的onInterceptTouc

Android -- Activity,Fragment lifecycle

Activity Lifecyce Fragment Lifecycle: 程序运行: 09-16 13:59:22.883 19022-19022/com.example.android.architecture.blueprints.todomvp.mock D/TasksActivity --debug: onCreate109-16 13:59:22.903 19022-19022/com.example.android.architecture.blueprints.todomvp.m

Android应用开发:LoaderManager在Activity/Fragment中的使用分析

LoaderManager 外部接口initLoader:起始 public <D> Loader<D> initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks<D> callback) { if (mCreatingLoader) { throw new IllegalStateException("Called while creating a loader"); } Loade