简体   繁体   中英

RecyclerView in PageView not showing list

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 :

  • PagerView is working well as it display a single TextView
  • RecyclerView was being displayed normally before the PageView

The Changes I made which after the changes the problem appears:

  • Moving the RecyclerView to a new Fragment Class

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();

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM