Conc.: I am trying to View a RecyclerView inside PagerView
Problem: The RecyclerView is not being displayed
Also, I have ready RecyclerView in PagerView Question knowing that I have to have another fragment for the Recycler and I have it
NB :
The Changes I made which after the changes the problem appears:
ExampleRecyclerViewFragment
public class ExampleRecyclerViewFragment extends Fragment {
public statlic ExampleAdapter adapter;
List<MainExampleObject> exampleList = new ArrayList<>();
public Example example = new Example();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_two, container, false);
RecyclerView exampleRecyclerView = (RecyclerView) rootView.findViewById(R.id.ExampleRecyclerView);
exampleList = new ArrayList<>();
adapter = new ExampleAdapter(exampleList);
LinearLayoutManager llm = new LinearLayoutManager(getActivity());
llm.setSmoothScrollbarEnabled(true);
exampleRecyclerView.setScrollbarFadingEnabled(true);
exampleRecyclerView.setLayoutManager(llm);
exampleRecyclerView.setAdapter(adapter);
return rootView;
}
public void fetchExamples(final DataSnapshot Examples) {
//noinspection StatementWithEmptyBody
if (Examples.hasChild("Method 2")) {
} else {
Examples.getRef().child("Method 1").addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
example.setStepName(String.valueOf(dataSnapshot.getKey()));
for (DataSnapshot childSnapshot : dataSnapshot.child("Code").getChildren()) {
example.addCode(String.valueOf(childSnapshot.getValue()));
}
for (DataSnapshot childSnapshot : dataSnapshot.child("Explaination").getChildren()) {
example.addExplanation(String.valueOf(childSnapshot.getValue()));
}
example.addExample();
exampleList.add(example.getExampleObject());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
}
}
public ExampleRecyclerViewFragment() {
// Required empty public constructor
}
}
ViewPagerAdapter
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return new ExampleRecyclerViewFragment();
}
@Override
public int getCount() {
return mFragmentTitleList.size();
}
void addFragment(String title) {
//mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
fragment_two.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"
tools:context=".ExampleRecyclerViewFragment"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/ExampleRecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
/>
</LinearLayout>
I think that code will be the needed if anyone needs to see other class just let me know with a comment
Sorry for forgetting mentioning that fetchExamples()
is get called in the main class in a method called in onCreate
new ExampleRecyclerViewFragment().fetchExamples(dataSnapshot.child("Examples"));
Thanks a lot
The problem is with the fact that you are calling the fetchExamples without the knowledge of whether your fragment has been inflated or not. You could use eventBus to send dataSnapshot object to your fragment and call the fetchExamples there. The code in your main class would be,
EventBus.getDefault().postSticky(dataSnapshot.child("Examples"));
and in your Fragment do,
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void onEvent(DataSnapshot examples) {
fetchExamples(examples);
}
@Override
public void onStop() {
EventBus.getDefault().unregister(this);
super.onStop();