Get ViewGroup on onCreate from a Fragment

1

The problem is this: I need to get the ViewGroup to inflate and thus be able to initialize my RecyclerView because when I change Tab (Tab) and return to it I have all the Fragment blank. I have been reading and testing and they say that I must do it onCreate, I do not get it, other than onAttach, where?

I leave a fragment of the code ...

...

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

    // AQUÍ QUIERO INFLAR Y HACER LO DE onCreateView
}

...

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

    mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_view_news_list);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    updateUI();

    return view;
}

@Override
public void onResume() {
    super.onResume();
    updateUI();
}

protected void updateUI() {
    List<News> news = NewsLab.getInstance(getActivity()).getArticles();

    if (mAdapter == null) {
        mRecyclerView.setAdapter(mAdapter = new NewsAdapter(news));
    } else {
        mAdapter.setNews(news);
        mAdapter.notifyDataSetChanged();
    }
}

...

I update

public class HomeActivity extends AppCompatActivity  {

// PROPERTIES

private ViewPager mViewPager;

// MENU METHODS

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_home_menu, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.to_search_menu_item:
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

// METHODS

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    setupViewPager(mViewPager = (ViewPager) findViewById(R.id.container));

    TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(mViewPager);

}


private void setupViewPager(ViewPager viewPager) {
    SectionsPagerAdapter adapter = new SectionsPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new NewsTagFragment(), getString(R.string.tag_news));
    adapter.addFragment(new CommercesTagFragment(), getString(R.string.tag_commerces));
    adapter.addFragment(new OffersTagFragment(), getString(R.string.tag_offers));
    adapter.addFragment(new ServicesTagFragment(), getString(R.string.tag_services));
    viewPager.setAdapter(adapter);
}

// INNED CLASSES

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    // PROPERTIES

    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    // CONSTRUCTORS

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

    // METHODS

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

    // OVERRIDE METHODS

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

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

    @Override
    public CharSequence getPageTitle(int position) {
        return mFragmentTitleList.get(position);
    }

}

Thank you.

    
asked by dddenis 21.02.2016 в 02:40
source

1 answer

3

The right thing to do is to inflate your views in onCreateView() .

You could use getView() but the problem is that it is initialized until onCreateView() has ended.

It seems to me that your problem in which you return to your tab and looks white, the fragment is actually because of your adapter.

Be sure to use in your Adapter: getChildFragmentManager() for example:

 mAdapter = new miTabsAdapter(getChildFragmentManager());
    
answered by 21.02.2016 / 07:12
source