user2442638
user2442638

Reputation:

Android: ViewPager - adding Fragments

I am trying to add a ViewPager, but I am am having problems adding new fragments. I followed a tutorial to create it where the on each swipe the SAME fragment was used with only a TextView in the fragment changing changing.

The fragment that works is called MyFragment. ( I don't know why this works and the others don't.

I don't want to use this fragment as I have different fragments that I have already made (that work fine). I want to add for example a fragment called ReminderFragment

I tried adding a switch and case to the getItem() method, but I get an error saying: "Type mismatch: cannot convert from name of fragment to Fragment".

This is the code of my FragmentActivity - it holds the FragmentPagerAdapter inside it (I don't know if this is a good way or not):

// Removed imports, package name

public class PageViewActivity extends FragmentActivity {


    MyPageAdapter pageAdapter;  
   private ViewPager pager; 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager_activity);  // Sets the layout to an xml which includes a viewpager

        List<Fragment> fragments = getFragments();  

        pageAdapter = new MyPageAdapter(getSupportFragmentManager(), fragments); 

        pager = (ViewPager)findViewById(R.id.viewpager); 
        pager.setAdapter(pageAdapter);
        pager.setCurrentItem(1); 
        pager.setPageTransformer(true, new ZoomOutPageTransformer()); 
    }

    @Override
    public void onBackPressed() {
        if (pager.getCurrentItem() == 1) {
                    super.onBackPressed();
        } else if (pager.getCurrentItem() == 0){
            pager.setCurrentItem(pager.getCurrentItem() + 1);
        }
        else if (pager.getCurrentItem() == 2){
            pager.setCurrentItem(pager.getCurrentItem() - 1);
        }
    }

    private List<Fragment> getFragments(){ 
        List<Fragment> fList = new ArrayList<Fragment>(); 
         // I don't know how to change this to work with my fragments
        fList.add(MyFragment.newInstance("Page 0"));  // MyFragment is the fragment I don't need, but it is the only fragment that works!
        fList.add(MyFragment.newInstance("Page 1"));
        fList.add(MyFragment.newInstance("Page 2"));

        return fList;
    }

    private class MyPageAdapter extends FragmentPagerAdapter {  // Sets what MyPagerAdapter is
        private List<Fragment> fragments; // Defines a list of fragments called fragments

        public MyPageAdapter(FragmentManager fm, List<Fragment> fragments) { // Sets what is inside the MyPagerAdapter
            super(fm);
            this.fragments = fragments;
        }
        @Override
        public Fragment getItem(int index) {
    //    return this.fragments.get(index);
        switch (index){
        case 0: return new ReminderFragment(); // This is where I get errors
        case 1: return new QuickNoteFragment();
        }


            } 

        @Override
        public int getCount() {
           return this.fragments.size();
          }
    }
}

This is the code of the ReminderFragment. This does not work as I get the error above

// Removed stuff

public class ReminderFragment extends Fragment implements OnClickListener{




public static final String ARG_nOTERACTIVITY_NUMBER = "noter_activity";

// Removed stuff


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View remView = inflater.inflate(R.layout.reminder, container, false);
    int i = getArguments().getInt(ARG_nOTERACTIVITY_NUMBER);
    String noter_activity = getResources().getStringArray(
            R.array.noter_array)[i];

    // Removed stuff

    getActivity().setTitle(noter_activity); // For navigation drawer(?)
    return remView;
}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub


    switch(v.getId()) {

        case R.id.***: // Does stuff



        case R.id.***:
             break;
                 }
    }
}



public static Fragment newInstance() {  // Is this necessary
    // TODO Auto-generated method stub
    ReminderFragment remFrag = new ReminderFragment();
    return remFrag;
}
}

I know there are two methods of adding the fragments here - I just trying to show what I have tried :-). I am very confused!

Thank you

Upvotes: 0

Views: 1503

Answers (1)

Blackbelt
Blackbelt

Reputation: 157487

Looks that you imported Fragments from the support package in all the class. The import should be android.support.v4.app.Fragment or android.app.Fragment (if you are targeting API level 11) in all the class

Upvotes: 1

Related Questions