2013-10-08 4 views
0

Я пытаюсь создать фрагмент, который будет иметь ViewPager. Когда упомянутый фрагмент вызывается и фиксируется, он отображает только первое изображение и не может быть изменен. Любые мысли, как достичь этого?Почему ViewPager внутри моего фрагмента не работает?

Вот фрагмент

import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentStatePagerAdapter; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class HowToFragment extends Fragment { 

    private ViewPager mViewPager; 
    private MyAdapter mAdapter; 
    private int[] image_id = {R.drawable.image_1, R.drawable.image_2, R.drawable.image_3}; 

    private static int image_pos = 0; 

    public static Fragment newInstance(int pos){ 
     image_pos = pos; 
     return new HowToFragment(); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_how_to_image, container, false); 
     v.setBackgroundResource(image_id[image_pos]); 
     return v; 
    } 

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

     mViewPager = new ViewPager(getActivity()); 
     mViewPager.setId(R.id.viewPager_howto); 
     FragmentManager fm = getFragmentManager(); 
     mAdapter = new MyAdapter(fm); 
     new setAdapterTask().execute(); 

    } 

    private class setAdapterTask extends AsyncTask<Void,Void,Void>{ 
      protected Void doInBackground(Void... params) { 
       return null; 
      } 

      @Override 
      protected void onPostExecute(Void result) { 
         mViewPager.setAdapter(mAdapter); 
      } 
    } 

    private class MyAdapter extends FragmentStatePagerAdapter{ 

     public MyAdapter(FragmentManager fm) { 
      super(fm); 
      // TODO Auto-generated constructor stub 
     } 

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

     } 
     @Override 
     public Fragment getItem(int position) { 
      return HowToFragment.newInstance(position); 
     } 

     @Override 
     public void destroyItem(ViewGroup container, int position, Object object) { 
      // TODO Auto-generated method stub 
      FragmentManager manager = getFragmentManager(); 
      FragmentTransaction ft = manager.beginTransaction(); 
      ft.remove((Fragment) object); 
      ft.commit(); 

      super.destroyItem(container, position, object); 
     } 


    } 
} 

ответ

0

Я сомневаюсь, что вы пытаетесь запустить это приложение в Android версии меньше, чем Honeycomb. То, что вы пытаетесь достичь, - это вложенные фрагменты. Поддержка вложенных фрагментов доступна только с jellybean 4.2

+0

Есть ли способ достичь этого? Я нацелен на API8 и до API17. –

+0

Вы можете использовать представления в представлении flipper вместо фрагментов. В этом случае вы будете жертвовать преимуществом жизненного цикла фрагмента. Просто вариант. – Praga

+0

Любой хороший ресурс, который вы можете предложить для просмотра flipper? –

Смежные вопросы