Android viewpager中的替换片段不工作

Android viewpager中的替换片段不工作,android,android-fragments,android-viewpager,fragmentstatepageradapter,fragmentmanager,Android,Android Fragments,Android Viewpager,Fragmentstatepageradapter,Fragmentmanager,在我的项目中,我使用actionbar和SwipeableThreeFragments(带viewpager的选项卡),我试图用第四个片段替换其中一个片段,但我无法得到它 **Below is my code** public class GetRideFragment extends Fragment implements ICustomDateTimeListener, SelectedLocationListener{ public GetRideFragmen

在我的项目中,我使用actionbar和SwipeableThreeFragments(带viewpager的选项卡),我试图用第四个片段替换其中一个片段,但我无法得到它

**Below is my code**

    public class GetRideFragment extends Fragment implements ICustomDateTimeListener, SelectedLocationListener{

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


           }
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.fragment_getride, container, false);

            return rootView;
        }


        public void onActivityCreated(Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);

            fromac.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    /* Intent newintent = new Intent(getActivity(), AutoSearchActivity.class);
                     startActivity(newintent);
                     getActivity().overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up );*/

                    PlaceSearchFragment fh = new PlaceSearchFragment();
                     FragmentManager fm = getFragmentManager();
                     FragmentTransaction ft = fm.beginTransaction();
                     ft.replace(R.id.fragcontainer, fh);
                     ft.addToBackStack("fh");
                     ft.commit();

                }
            });
下面是我的布局

<?xml version="1.0" encoding="utf-8"?>
  <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
         android:id="@+id/fragcontainer">

<LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/fragcontainer"
     >
    <TextView
        android:id="@+id/ridetitile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Get a Ride"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"
        android:textColor="#33b5e5"
        android:layout_gravity="center"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:layout_marginTop="20dp"
     android:layout_marginRight="5dp"
      android:layout_marginLeft="5dp"
     android:background="@drawable/gray_btn_disabled_normal" >
...............
...........

我不知道哪里出了问题。非常感谢您的帮助。

我也遇到了同样的问题。经过多次搜索,我找到了解决方案。我会在你的代码中看到两个问题:(对不起,我的英语不好)

1) 要更改适配器(连接到您的viewpager)中给定位置的项目,您必须更改方法
public Fragment getItem(int index)
返回的项目,并调用方法
notifyDataSetChanged()
通知适配器内容已更改

2)
FragmentStatePagerAdapter
的实现包含一个基于位置的缓存,即使调用
notifyDataSetChanged()
并返回
PagerAdapter.position\u NONE
(此处报告了一个问题:)

我建议你:

  • 使用
    FragmentPagerAdapter
    ,正确执行方法
    getItem(int-index)
    (在给定位置使用正确的项)、
    getItemPosition(Object-Object)
    getItemId(int-position)

  • >P>如果您想使用<代码> FractStasePeaServer < /代码>,请考虑上面我喜欢的问题中建议的实现()。p>

我希望有帮助

问题应该在适配器中。你用的是哪一个?有错误吗???如果那样的话,展示你的logcat@carlo.marinangeli我正在使用FragmentStatePagerAdapter…用适配器更新我的问题,请看一看我在做什么@Override public Fragment getItem(int index){switch(index){case 0:if(index==0){return GetRideFragment.newInstance();}else{return PlaceSearchFragment.newInstance();}我可以在顶部看到新的片段,但旧的片段仍然保留着……每次您想更改适配器内的内容时,您能告诉我应该在哪里使用notifyDataSetChanged()吗(或者更好:每次内容更改,因此
getItem
准备返回不同的片段->替换片段),您必须调用
notifyDataSetChanged()
。这样您就可以通知适配器它必须刷新。
public class TabsPagerAdapter extends FragmentStatePagerAdapter {

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

    @Override
    public Fragment getItem(int index) {

        switch (index) {
        case 0:
            // Top Rated fragment activity
            return new GetRideFragment();
        case 1:
            // Games fragment activity
            return new PostRideFragment();
        case 2:
            // Movies fragment activity
            return new SearchRidesFragment();
        }

        return null;
    }
    @Override
    public int getItemPosition(Object object){
        return PagerAdapter.POSITION_NONE;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 3;
    }

}