Reputation:
I’m trying to initialize ViewPager in Fragment (ViewPager pager = fragmentNews.getPager()
), but it’s still null:
My fragment:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class NewsFragment extends Fragment {
private ViewPager pager;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_news, container, false);
pager = (ViewPager) view.findViewById(R.id.sliding_pager);
return view;
}
public ViewPager setAdapterForPager(PagerAdapter adapter){
pager.setAdapter(adapter);
return pager;
}
public ViewPager getPager() {
return pager;
}
}
Here is my MainActivity:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
...
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
...
FragmentManager fm = getSupportFragmentManager();
fm.beginTransaction().add(R.id.container_for_fragments, fragmentNews).commit();
pagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
ViewPager pager = fragmentNews.getPager();
pager.setAdapter(pagerAdapter);
...
fragment_news.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="100"
tools:context=".fragments.NewsFragment">
<android.support.v4.view.ViewPager
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sliding_pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30" />
...
</LinearLayout>
But in NewsFragment.java pager remains null. So after launching I have got RuntimeException, mistake in row:
pager.setAdapter(pagerAdapter); in MainActivity.java
Without trying to initialize the ViewPager, the app works fine.
Upvotes: 0
Views: 655
Reputation: 23144
Most likely, the onCreateView
of the fragment hasn't been executed yet. It takes time adding a Fragment to your Activity. You can't assume it happened right after adding it.
What you can do is overwrite onViewCreated
in the Fragment that notifies the Activity in some way that it is created.
Also, where is fragmentNews
coming from? you do a new NewsFragment()
in the transaction but it's not saved to fragmentNews
so you have two seperate Fragments it seems.
EDIT:
You could do it like this I think
Add this your Fragment:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
((MainActivity) getActivity()).viewIsCreated();
}
And this in your activity
public void viewIsCreated() {
ViewPager pager = fragmentNews.getPager();
pager.setAdapter(pagerAdapter);
}
And remove those two lines from the onCreate
Upvotes: 0
Reputation: 132972
Here
pager.setAdapter(pagerAdapter);
line causing issue because pager
is null
.
Why?
Because using two different objects of NewsFragment
: one for calling getPager
method another which is passing in add
method as last parameter.
Use same object which is passed in add
method of accessing View's,methods,... from NewsFragment
Fragment.
Upvotes: 1