2016-08-29 14 views
2

私はフラグメントを追加したいViewPagerを持っています。 ViewPagerは画面上で正しく表示されますが、残念ながらコンテンツは保持されません。ViewPagerでフラグメントが表示されない

私は

getChildFragmentManager() 

getSupportFragmentManager() 

を置き換えるために、いくつかのpostsでの提案を見てきました。しかし、私はActionBarを必要としています。残念ながらChildFragmentmanagerAppCompatActivityにはありません。

デバッグ中に、フラグメントのonCreateView()メソッドが呼び出され、レイアウトが返されることがわかりました。

質問:Fragmentsを表示させるにはどうすればよいですか?そして、私のコードとの主な相違点はsampleでしたか?

活動:

public class ViewPagerActivity extends AppCompatActivity { 

    private ViewPager mViewPager; 

    private List<Location> locationList = new ArrayList<>(); 
    private locationsBaseHandler db; 
    private CustomPagerAdapter mAdapter; 

    private Location mLocation; 

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

     setContentView(R.layout.activity_viewpager); 

     locationList.add(someData); 

     mViewPager = (ViewPager) findViewById(R.id.viewpager); 
     mAdapter = new CustomPagerAdapter(this, getSupportFragmentManager(), locationList); 

     mViewPager.setAdapter(mAdapter); 

    } 

} 

ページャアダプタ:

public class CustomPagerAdapter extends FragmentPagerAdapter { 

    private Context mContext; 
    private List<Location> locationList = new ArrayList<>(); 

    public CustomPagerAdapter(Context mContext, FragmentManager fm, List<Location> locationList) { 
     super(fm); 

     this.locationList.addAll(locationList); 
     this.mContext = mContext; 
    } 

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

    @Override 
    public int getCount() { 
     return 5; 
    } 

    @Override 
    public boolean isViewFromObject(View view, Object object) { 
     return false; 
    } 
} 

は、フラグメント:

public class LocationFragment extends Fragment { 
    private static final String ARG_LAYOUT_ID = "page_number"; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     View layout = inflater.inflate(R.layout.fragment_location, container, false); 

     return layout; 
    } 

    public static LocationFragment newInstance(int selectedIdForIndex) { 
     LocationFragment fragment = new LocationFragment(); 

     Bundle args = new Bundle(); 
     args.putInt(ARG_LAYOUT_ID, selectedIdForIndex); 
     fragment.setArguments(args); 

     return fragment; 
    } 

    public int getPageNumber() { 
     return getArguments().getInt(ARG_LAYOUT_ID); 
    } 
} 

答えて

2

CustomPagerAdapter方法isViewFromObjectを削除するようにしてください。

@Override 
public boolean isViewFromObject(View view, Object object) { 
    return false; 
} 

我々はisViewFromObjectにこのコメントを見ることができます:

は{@link #instantiateItem(のViewGroup、INT)}で返されるページビューは、特定のキーオブジェクト と関連しているかどうかを決定します。このメソッドは、PagerAdapterが正しく機能するためには、 が必要です。

関連する問題