Android listview 替换片段时无法加载PagerSlidingTabStrip中的选项卡

Android listview 替换片段时无法加载PagerSlidingTabStrip中的选项卡,android-listview,android-fragments,android-viewpager,Android Listview,Android Fragments,Android Viewpager,我正在尝试用PagerSlidingTabStrip而不是TabView实现viewpager。viewpager有三个选项卡,其中每个listview显示事件列表。这三个选项卡分别称为“过去”、“今晚”和“未来” 我已经按照页面所示设置了滑块: public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

我正在尝试用PagerSlidingTabStrip而不是TabView实现viewpager。viewpager有三个选项卡,其中每个listview显示事件列表。这三个选项卡分别称为“过去”、“今晚”和“未来”

我已经按照页面所示设置了滑块:

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        View v = inflater.inflate(R.layout.all_events_main_strip, container, false);     

        // Set up the ViewPager, attaching the adapter and setting up a listener for when the
        // user swipes between sections.
        pager = (ViewPager) v .findViewById(R.id.pager_main);
        tabs = (PagerSlidingTabStrip) v.findViewById(R.id.tabs);
        adapter = new MyPagerAdapter(getFragmentManager());

        pager.setAdapter(adapter);
        tabs.setViewPager(pager);

        // Set Present tab as default
        pager.setCurrentItem(1);
        return v;
    }
当应用程序启动时,主活动第一次添加了这个片段,一切都很好。具有3个列表视图的3个可切换选项卡。(c.f.代码部分)

问题出在这里

我注意到,当我按下后退按钮并再次替换片段时,为了重新打开VIEWPAGE,中间的选项卡没有显示任何ListVIEW。如果我键入left或right,则会加载并显示其他选项卡中的内容,但当前选项卡仍为空。 调试时,根本不调用ToNightEvents列表片段。 你们有什么解决问题的建议吗

代码:

代码的结构如下:在onCreateView之后,我添加了一个OnDestroyView方法来删除片段,但它不起作用。。。然后在fragmentPagerAdapter中,每个页面在getItem方法中被称为片段。最后,在代码末尾,您可以看到三个ListFragment类,其中listview是通过AsyncTask填充的

public class FragmentAllEvents extends Fragment 
{
    private static final String TAG_UID = "uid";
    private static final String TAG_LOGO = "logo";
    private static final String TAG_POKUID = "pokuid";

    static ArrayList<HashMap<String, String>> userList;
    ArrayList<HashMap<String, String>> userListTotal;
    private final Handler handler = new Handler();
    HashMap<String, String> userSelected;
    EventsFunctions eventsFunctions;
    UserFunctions userFunctions;
    static ListView lv;
    ActionBar actionBar;
    MyPagerAdapter adapter;
    ViewPager pager;
    PagerSlidingTabStrip tabs;
    private Drawable oldBackground = null;
    private int currentColor = 0xFF666666;
    //Context context = this;

    @Override public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        // Set up the action bar.
        actionBar = getActivity().getActionBar();
        actionBar.setHomeButtonEnabled(true);

    }

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        View v = inflater.inflate(R.layout.all_events_main_strip, container, false);
        pager = (ViewPager) v .findViewById(R.id.pager_main);
        tabs = (PagerSlidingTabStrip) v.findViewById(R.id.tabs);
        adapter = new MyPagerAdapter(getFragmentManager());

        pager.setAdapter(adapter);

        tabs.setViewPager(pager);

        pager.setCurrentItem(1);
        return v;
    }

    @Override
    public void onDestroyView() 
    {
         super.onDestroyView();
         getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
    }

    public static class MyPagerAdapter extends FragmentPagerAdapter 
    {

        public MyPagerAdapter(FragmentManager fm) 
        {
            super(fm);
        }


        @Override
        public Fragment getItem(int i) 
        {
            switch (i) 
            {
                case 0:
                    return new PastEvents();

                case 1:
                    return new ToNightEvents();

                case 2:
                    return new FutureEvents();

                /*default:
                    // The other sections of the app are dummy placeholders.

                    return new ToNightEvents();
                  */  
            }
            return null;
        }


        /**
         * A fragment that launches past events list.
         */
        public static class PastEvents extends ListFragment implements
        PullToRefreshAttacher.OnRefreshListener 
        {
            private ListView pastList;
            private PullToRefreshAttacher mPullToRefreshAttacher;
            ProgressBar progress;
            String tabTime;

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
            {
                View pastView = inflater.inflate(R.layout.pastlist, container, false);
                progress = (ProgressBar) pastView.findViewById(R.id.loading_spinner_past);
                tabTime="past";
                pastList = (ListView) pastView.findViewById(android.R.id.list);

                // Now get the PullToRefresh attacher from the Activity. An exercise to the reader
                // is to create an implicit interface instead of casting to the concrete Activity
                mPullToRefreshAttacher =  ((Home) getActivity()).getPullToRefreshAttacher();

                // Now set the ScrollView as the refreshable view, and the refresh listener (this)
                mPullToRefreshAttacher.addRefreshableView(pastList, this);

                new AsyncLoadEvents(getActivity(), progress, pastList, mPullToRefreshAttacher).execute(tabTime);
                return pastView;
            }


            @SuppressWarnings("unchecked")
            @Override
            public void onListItemClick(ListView listView, View view, int position, long id) 
            {
                super.onListItemClick (listView, view, position, id);
                HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);
                //Log.e("AttendList Report", "Clicked list item: " + position +" Content: \n" + map.get(TAG_ID).toString());
                Log.e("PastList Report", "Clicked list item: " + position +" Event's content: \n" + map.get(TAG_UID).toString());
                Intent intent = new Intent(getActivity(), SingleEventActivity.class);

                intent.putExtra("pokuid",map.get(TAG_POKUID)); // Maybe remove attribute toString();
                intent.putExtra("uid", map.get(TAG_UID)); 
                intent.putExtra("logo",map.get(TAG_LOGO));
                getActivity().startActivity(intent);
            }

            @Override
            public void onRefreshStarted(View view) 
            {
                new AsyncLoadEvents(getActivity(), progress, pastList, mPullToRefreshAttacher).execute(tabTime);                
            }

        }

        /**
         * A fragment that launches future event list.
         */
        public static class FutureEvents extends ListFragment  implements
        PullToRefreshAttacher.OnRefreshListener 
        {
            private ListView futureList;
            private PullToRefreshAttacher mPullToRefreshAttacher;
            ProgressBar progress;
            String tabTime;

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
            {
                View futureView = inflater.inflate(R.layout.futurelist, container, false);
                progress = (ProgressBar) futureView.findViewById(R.id.loading_spinner_future);
                tabTime  = "future";
                futureList = (ListView) futureView.findViewById(android.R.id.list); //change to attendlist if needed


                // Now get the PullToRefresh attacher from the Activity. An exercise to the reader
                // is to create an implicit interface instead of casting to the concrete Activity
                mPullToRefreshAttacher =  ((Home) getActivity()).getPullToRefreshAttacher();

                // Now set the ScrollView as the refreshable view, and the refresh listener (this)
                mPullToRefreshAttacher.addRefreshableView(futureList, this);

                new AsyncLoadEvents(getActivity(), progress, futureList, mPullToRefreshAttacher).execute(tabTime);
                return futureView;
            }

            @SuppressWarnings("unchecked")
            @Override
            public void onListItemClick(ListView listView, View view, int position, long id) 
            {
                super.onListItemClick (listView, view, position, id);

                HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);
                Log.e("PastList Report", "Clicked list item: " + position +" Event's content: \n" + map.get(TAG_UID).toString());
                Intent intent = new Intent(getActivity(), SingleEventActivity.class);


                intent.putExtra("pokuid",map.get(TAG_POKUID)); // Maybe remove attribute toString();
                intent.putExtra("uid", map.get(TAG_UID)); 
                intent.putExtra("logo",map.get(TAG_LOGO));
                getActivity().startActivity(intent);

            }

            @Override
            public void onRefreshStarted(View view) 
            {
                new AsyncLoadEvents(getActivity(), progress, futureList, mPullToRefreshAttacher).execute(tabTime);              
            }
        }

        /**
         * A fragment that launches future event list.
         */
        public static class ToNightEvents extends ListFragment implements
        PullToRefreshAttacher.OnRefreshListener 
        {
            private ListView tonightList;
            private PullToRefreshAttacher mPullToRefreshAttacher;
            ProgressBar progress;
            String tabTime;

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
            {
                View tonightView = inflater.inflate(R.layout.tonightlist, container, false);
                progress = (ProgressBar) tonightView.findViewById(R.id.loading_spinner_tonight);
                tabTime  = "tonight";
                tonightList = (ListView) tonightView.findViewById(android.R.id.list); //change to attendlist if needed

                // Now get the PullToRefresh attacher from the Activity. An exercise to the reader
                // is to create an implicit interface instead of casting to the concrete Activity
                mPullToRefreshAttacher =  ((Home) getActivity()).getPullToRefreshAttacher();

                // Now set the ScrollView as the refreshable view, and the refresh listener (this)
                mPullToRefreshAttacher.addRefreshableView(tonightList, this);

                new AsyncLoadEvents(getActivity(), progress, tonightList, mPullToRefreshAttacher).execute(tabTime);
                return tonightView;
            }


            @SuppressWarnings("unchecked")
            @Override
            public void onListItemClick(ListView listView, View view, int position, long id) 
            {
                super.onListItemClick (listView, view, position, id);

                HashMap<String, String> map = (HashMap<String, String>) getListView().getItemAtPosition(position);
                Log.e("PastList Report", "Clicked list item: " + position +" Event's content: \n" + map.get(TAG_UID).toString());
                Intent intent = new Intent(getActivity(), SingleEventActivity.class);


                intent.putExtra("pokuid",map.get(TAG_POKUID)); // Maybe remove attribute toString();
                intent.putExtra("uid", map.get(TAG_UID)); 
                intent.putExtra("logo",map.get(TAG_LOGO));
                getActivity().startActivity(intent);

            }

            @Override
            public void onRefreshStarted(View view) 
            {
                new AsyncLoadEvents(getActivity(), progress, tonightList, mPullToRefreshAttacher).execute(tabTime);             
            }
        }

        public String[] titles=
        {
            "Past",
            "Tonight",
            "Future"
        };

        @Override
        public int getCount() 
        {
            return titles.length;
        }

        @Override
        public CharSequence getPageTitle(int position) 
        {
            return titles[position];
        }
    }
}
公共类FragmentAllEvents扩展了片段
{
私有静态最终字符串标记\u UID=“UID”;
私有静态最终字符串标记_LOGO=“LOGO”;
私有静态最终字符串标记_POKUID=“POKUID”;
静态ArrayList用户列表;
ArrayList userListTotal;
私有最终处理程序=新处理程序();
HashMap用户选择;
事件函数事件函数;
用户函数用户函数;
静态ListView lv;
ActionBar ActionBar;
MyPagerAdapter适配器;
查看寻呼机;
页面滑动选项卡;
私有可绘制oldBackground=null;
私有int currentColor=0xFF666666;
//上下文=这个;
@在创建时覆盖公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//设置操作栏。
actionBar=getActivity().getActionBar();
actionBar.setHomeButtonEnabled(真);
}
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
视图v=充气机充气(右布局、所有事件、主条、容器、假);
pager=(ViewPager)v.findviewbyd(R.id.pager\u main);
tabs=(PagerSlidingTabStrip)v.findViewById(R.id.tabs);
适配器=新的MyPagerAdapter(getFragmentManager());
寻呼机设置适配器(适配器);
tabs.setViewPager(寻呼机);
寻呼机设置当前项(1);
返回v;
}
@凌驾
公共无效onDestroyView()
{
super.onDestroyView();
getActivity().getSupportFragmentManager().beginTransaction().remove(this.commit());
}
公共静态类MyPagerAdapter扩展了FragmentPagerAdapter
{
公共MyPagerAdapter(碎片管理器fm)
{
超级(fm);
}
@凌驾
公共片段getItem(int i)
{
开关(一)
{
案例0:
返回新的PastEvents();
案例1:
返回新的ToNightEvents();
案例2:
返回新的FutureEvents();
/*默认值:
//应用程序的其他部分是虚拟占位符。
返回新的ToNightEvents();
*/  
}
返回null;
}
/**
*启动过去事件列表的片段。
*/
公共静态类PasteEvents扩展ListFragment实现
PullToRefreshAttacher.OnRefreshListener
{
私有列表视图列表;
私人PullToRefreshAttacher mPullToRefreshAttacher;
进度条进度;
字符串tabTime;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态)
{
View pastView=充气机。充气(R.layout.pastlist,容器,false);
进度=(ProgressBar)pastView.findViewById(R.id.loading\u spinner\u past);
tabTime=“过去”;
pastList=(ListView)pastView.findViewById(android.R.id.list);
//现在从活动中获取PullToRefresh attacher。这是给读者的练习
//是创建一个隐式接口,而不是转换到具体的活动
mPullToRefreshAttacher=((Home)getActivity()).getPullToRefreshAttacher();
//现在将ScrollView设置为可刷新视图,并设置刷新侦听器(如下所示)
mPullToRefreshAttacher.addRefreshTableView(过去列表,此);
新建AsyncLoadEvents(getActivity()、progress、pastList、mPullToRefreshAttacher);
返回过去视图;
}
@抑制警告(“未选中”)
@凌驾
public void onListItemClick(ListView ListView、视图视图、int位置、长id)
{
super.onListItemClick(列表视图、视图、位置、id);
HashMap=(HashMap)getListView().getItemAtPosition(位置);
//Log.e(“AttendList Report”,“单击列表项:“+position+”内容:\n“+map.get(TAG_ID).toString());
Log.e(“PastList报告”,“单击列表项:“+position+”事件的内容:\n“+map.get(TAG_UID).toString());
Intent Intent=new Intent(getActivity(),SingleEventActivity.class);
intent.putExtra(“pokuid”,map.get(TAG_pokuid));//可能会删除属性toString();
intent.putExtra(“uid”,map.get(TAG_uid));
pager.invalidate();
tabs.invalidate();
pager.setAdapter(new MyPagerAdapter(getFragmentManager()));
tabs.setViewPager(pager);
adapter = new MyPagerAdapter(getChildFragmentManager());