0

In my project i am using actionbar with swipeable threefragments(tabs with viewpager), i am trying to replace one of the fragment with fourth fragment, but iam not able to get it..

**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();

                }
            });

Below is my layout

<?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" >
...............
...........

My adpater

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

}

nNot sure where i am going wrong.Any help is appreciated.

4

1 回答 1

0

我有同样的问题。经过大量搜索,我找到了解决方案。我会在您的代码中看到 2 个问题:(抱歉我的英语不好)

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

2) 的实现FragmentStatePagerAdapter包含基于位置的缓存,即使您调用notifyDataSetChanged()并返回它也不会改变PagerAdapter.POSITION_NONE(这里报告了一个问题:https ://code.google.com/p/android/问题/详细信息?id=37990

我建议你的是:

  • 使用 a FragmentPagerAdapter,正确实现方法getItem(int index)(在给定位置使用正确的项目)getItemPosition(Object object), 和getItemId(int position)

  • 如果您想使用 a FragmentStatePagerAdapter,请考虑我在上面喜欢的问题(NewFragmentStatePagerAdapter)中建议的实现。

我希望它有帮助!

于 2014-01-30T10:09:41.690 回答