在嵌套滚动视图中有两个可回收视图

4
我有一个嵌套滚动视图,里面包含一个线性布局,其中包括两个recycler views。现在的问题是第一个recycler view没有完全展开。即,第一个recycler view列表中有5个项目,但如果我放置wrap content,它仅显示第一项。这应该因为wrap content而扩展到5个项目,但它不起作用。如果我将高度固定为200DP300dp,则会开始显示更多项目,直到达到该高度。然而,我想显示第一个recycler view的所有项目,然后当我滚动时,应开始显示第二个recycler view项目在第一个recycler view项目结束后。

我的布局是:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        android:layout_marginTop="60dp"
        android:orientation="vertical">

        <com.sooryen.customview.CustomTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/spacing_normal"
            android:text="@string/my_booking_latest_booking_lable"
            app:font="avenirltstd_medium" />

        <include layout="@layout/layout_divider" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_ongoing_bookings"
            android:visibility="visible"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layoutManager="android.support.v7.widget.LinearLayoutManager" />

        <com.sooryen.customview.CustomTextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:visibility="visible"
            android:layout_margin="@dimen/spacing_normal"
            android:text="@string/my_booking_past_booking_lable"
            app:font="avenirltstd_medium" />

        <include layout="@layout/layout_divider" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/rv_past_bookings"
            android:visibility="visible"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:nestedScrollingEnabled="false"
            android:layout_marginBottom="@dimen/spacing_extra_small"
            android:scrollbars="none"
            app:layoutManager="android.support.v7.widget.LinearLayoutManager" />
        <View
            android:layout_width="match_parent"
            android:layout_height="150dp" />
    </LinearLayout>
</android.support.v4.widget.NestedScrollView> 

请帮忙,我做错了什么。我从互联网上尝试了很多方法,但没有任何效果。这是屏幕截图。

enter image description here

“LABEL最新预订”有5个项目,但仅显示一个,并且不会扩展到5个项目。然而,“第二个LABEL过去的预订”完美地工作,并在我滚动到末尾时显示所有项目。
我的Java文件是:
public class MyBookingActivity extends BaseToolBarActivity implements 
    SwipeRefreshLayout.OnRefreshListener {

    int cancelValue;
    private SwipeRefreshLayout swipeRefreshLayout;
    @BindView(R.id.rv_ongoing_bookings)
    RecyclerView mRVOngoingBookings;
    private List<MyBookingsApi.ApiResponse.Datum> mCourtDataList = new ArrayList<>();
    @BindView(R.id.rv_past_bookings)
    RecyclerView mRVPastBookings;
    private BaseRecyclerAdapter<MyBookingsApi.ApiResponse.Datum, MyBookingsViewHolder> mBaseRecyclerAdapterMyBookings = new BaseRecyclerAdapter<MyBookingsApi.ApiResponse.Datum, MyBookingsViewHolder>(MyBookingsViewHolder.class, R.layout.layout_list_item_my_bookings) {

        @Override
        protected void populateViewHolder(MyBookingsViewHolder itemViewHolder, final MyBookingsApi.ApiResponse.Datum model, int position) {
            String date = null;
            try {
                date = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH).format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(model.getDate()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            String sessions = "N.A.";
            int CancelledValue = model.getCancelled();
            if (CancelledValue == 0)
            {
                itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_no));
                itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_green);
            }
            else
            {
                itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_yes));
                itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_red);
            }
            String paymentConfirmed  = model.getPayment_confirmed();
            String paymentType = model.getPaymentType();
            if (paymentConfirmed.equals("true"))
            {
                itemViewHolder.PaymentStatus.setText("Confirmed");

            }
            else
            {
                itemViewHolder.PaymentStatus.setText("Pending");
            }
            if (CancelledValue == 0 && paymentConfirmed.equals("false") && paymentType.equals("cash"))
            {

                itemViewHolder.DepositThisAmount.setText("Deposit " + String.valueOf(model.getDepositAmount()) + " SAR in " +
                String.valueOf(model.getDepositTimeAllowed()) + " HRS");
            }
            else
            {
                itemViewHolder.DepositThisAmount.setVisibility(View.GONE);
            }
            if (model.getSession() != null)
                sessions = model.getSession();
            itemViewHolder.mCustomTextViewCourtBookingTime.setText(date + " " + sessions);
            if (getResources().getConfiguration().locale.equals(new Locale("ar"))) {
                itemViewHolder.mCustomTextViewCourtPrice.setText(model.getPrice() + " " + "ريال");
                itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText("يمكن الغاء الحجز قبل المباراة" + " : " + model.getCancelCutoffTime());
            } else {
                itemViewHolder.mCustomTextViewCourtPrice.setText(getString(R.string.price, model.getPrice()));
                itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText(getString(R.string.cancellation_cutoff, model.getCancelCutoffTime()));
            }
            String cancelshow = model.getCancelshow();
            if (cancelshow.equals("true"))
            {
                cancelValue = 1;
                itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.VISIBLE);
            }
            else
            {
                cancelValue = 0;
                itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.GONE);
            }

            itemViewHolder.mCustomTextViewCourtName.setText(model.getCourtName());
            itemViewHolder.mAppCompatImageViewMoreHoriz.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    PopupMenu popup = new PopupMenu(MyBookingActivity.this, v);
                    popup.getMenu().add(0, 1, 0, getString(R.string.my_booking_cancel));


                    //adding click listener
                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case 1:
                                    cancelBooking(model.getId());
                                    break;
                                //case 1:
                                  //  deleteBooking(model.getId());
                            }
                            return false;
                        }
                    });
                    //displaying the popup
                    popup.show();
                }
            });
            itemViewHolder.mReaRelativeLayoutMyBooking.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
                }
            });

            itemViewHolder.mAppCompatImageViewRightArrow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
                }
            });
        }

    };
    private BaseRecyclerAdapter<PastBookingsApi.ApiResponse.Datum, MyPastBookingsViewHolder> mBaseRecyclerAdapterMyPastBookings = new BaseRecyclerAdapter<PastBookingsApi.ApiResponse.Datum, MyPastBookingsViewHolder>(MyPastBookingsViewHolder.class, R.layout.layout_list_item_my_bookings) {

        @Override
        protected void populateViewHolder(MyPastBookingsViewHolder itemViewHolder, final PastBookingsApi.ApiResponse.Datum model, int position) {
            String date = null;
            try {
                date = new SimpleDateFormat("yyyy/MM/dd", Locale.ENGLISH).format(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH).parse(model.getDate()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            String sessions = "N.A.";
            int CancelledValue = model.getCancelled();
            if (CancelledValue == 0)
            {
                itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_no));
                itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_green);
            }
            else
            {
                itemViewHolder.PaymentYesNo.setText(getString(R.string.booking_detail_yes));
                itemViewHolder.PaymentYesNo.setBackgroundResource(R.drawable.round_corner_linear_red);
            }
            itemViewHolder.DepositThisAmount.setVisibility(View.GONE);
            int paymentConfirmed  = model.getPaymentConfirmed();
            if (paymentConfirmed == 1)
            {
                itemViewHolder.PaymentStatus.setText("Confirmed");

            }
            else
            {
                itemViewHolder.PaymentStatus.setText("Pending");
            }
            if (model.getSession() != null)
                sessions = model.getSession();
            itemViewHolder.mCustomTextViewCourtBookingTime.setText(date + " " + sessions);
            if (getResources().getConfiguration().locale.equals(new Locale("ar"))) {
                itemViewHolder.mCustomTextViewCourtPrice.setText(model.getPrice() + " " + "ريال");
            } else {
                itemViewHolder.mCustomTextViewCourtPrice.setText(getString(R.string.price, model.getPrice()));
            }
            itemViewHolder.mCustomTextViewCourtCancellationCutoff.setText(getString(R.string.cancellation_cutoff, "0"));
            itemViewHolder.mCustomTextViewCourtName.setText(model.getCourtName());
            itemViewHolder.mAppCompatImageViewMoreHoriz.setVisibility(View.VISIBLE);
            itemViewHolder.mAppCompatImageViewMoreHoriz.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    PopupMenu popup = new PopupMenu(MyBookingActivity.this, v);
                    popup.getMenu().add(0, 1, 0, getString(R.string.notification_delete));

                    popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                        @Override
                        public boolean onMenuItemClick(MenuItem item) {
                            switch (item.getItemId()) {
                                case 1:
                                    deleteBooking(model.getId());
                                    break;
                            }
                            return false;
                        }
                    });
                    popup.show();
                }
            });
            itemViewHolder.mAppCompatImageViewRightArrow.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
                }
            });
            itemViewHolder.mReaRelativeLayoutMyBooking.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   // launchActivity(MyBookingDetailActivity.getActivityIntent(MyBookingActivity.this, model.getId(), "MyBooking", 1));
                }
            });
        }
    };

    public static Intent getActivityIntent(Context context) {
        return new Intent(context, MyBookingActivity.class);
    }

    private void cancelBooking(final int id) {

    }

    private void deleteBooking(final int id) {

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setTitle(getString(R.string.title_activity_my_booking));
        setUpRecyclerView();
        setUpEmptyAdapter();
        swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
        swipeRefreshLayout.setOnRefreshListener(this);
        getMyBooking();
        getMyPastBooking();
        /*swipeRefreshLayout.post(new Runnable() {
                                    @Override
                                    public void run() {
                                        swipeRefreshLayout.setRefreshing(true);

                                        getMyBooking();
                                    }
                                }
        );*/
    }

    private void setUpEmptyAdapter() {
        mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
            @Override
            protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
                viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
                viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
                viewHolder.refreshText.setText(R.string.swipe);
                //viewHolder.mCustomButton.setText(R.string.try_again);
                viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //getMyPastBooking();
                    }
                });
            }
        });

        mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
            @Override
            protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
                viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
                viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
                //viewHolder.mCustomButton.setText(R.string.try_again);
                viewHolder.refreshText.setText(R.string.swipe);
                viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // getMyBooking();
                    }
                });
            }
        });
    }

    private void setUpRecyclerView() {
         mRVOngoingBookings.setAdapter(mBaseRecyclerAdapterMyBookings);
        DividerItemDecoration mDividerItemDecorationMyBookings = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
        mDividerItemDecorationMyBookings.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
        mRVOngoingBookings.addItemDecoration(mDividerItemDecorationMyBookings);

        mRVPastBookings.setAdapter(mBaseRecyclerAdapterMyPastBookings);
        DividerItemDecoration mDividerItemDecorationMyPastBookings = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL);
        mDividerItemDecorationMyPastBookings.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider));
        mRVPastBookings.addItemDecoration(mDividerItemDecorationMyPastBookings);

    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == android.R.id.home) {
            finishWithResultCancel();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected int getMenuResource() {
        return RESOURCE_NO_MENU;
    }

    @Override
    protected int getLayoutResource() {
        return R.layout.activity_my_booking;
    }

    @Override
    public void onResume() {
        super.onResume();
        registerEventBus();
        //getMyBooking();
        //getMyPastBooking();
    }

    @Override
    public void onPause() {
        super.onPause();
        unRegisterEventBus();
    }

    private void getMyPastBooking() {
      /// swipeRefreshLayout.setRefreshing(true);
        final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
        pd.setMessage("Please wait..");
        pd.show();
        Handler mHandler = new Handler();
        mHandler.postDelayed(new Runnable() {

            @Override
            public void run() {
                pd.dismiss();
                startApiService(PastBookingsApi.getServiceIntent(MyBookingActivity.this, getToken()));
            }

        }, 800);

    }

    private void getMyBooking() {
       // swipeRefreshLayout.setRefreshing(true);
        final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
        pd.setMessage("Please wait..");
        pd.show();
        Handler mHandler = new Handler();
        mHandler.postDelayed(new Runnable() {

            @Override
            public void run() {
                pd.dismiss();
                startApiService(MyBookingsApi.getServiceIntent(MyBookingActivity.this, getToken()));
            }

        }, 2000);

        //swipeRefreshLayout.setRefreshing(false);
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void onMessageEvent(BaseApi.EventBusMessage eventBusMessage) {
        switch (eventBusMessage.event) {
            case BaseApi.EventBusMessage.EVENT_SHOW_PROGRESS_DIALOG:
                showProgressDialog();
                break;
            case BaseApi.EventBusMessage.EVENT_HIDE_PROGRESS_DIALOG:
                hideProgressDialog();
                break;
            default:
                if (eventBusMessage.object instanceof MyBookingsApi.ApiResponse)
                    parseMyBookingsSuccessResponse((MyBookingsApi.ApiResponse) eventBusMessage.object);
                else if (eventBusMessage.object instanceof PastBookingsApi.ApiResponse) {
                    parsePastBookingsSuccessResponse((PastBookingsApi.ApiResponse) eventBusMessage.object);
                } else if (eventBusMessage.object instanceof BaseApi.DefaultErrorResponse) {
                    parseErrorResponse((BaseApi.DefaultErrorResponse) eventBusMessage.object);
                } else if (eventBusMessage.object instanceof BaseApi.Error500Response) {
                    //parseError500Response((BaseApi.Error500Response) eventBusMessage.object);
                } else if (eventBusMessage.object instanceof MyBookingCancelApi.ApiResponse) {
                    parseCancelBookingSuccessResponse((MyBookingCancelApi.ApiResponse) eventBusMessage.object);
                } else if (eventBusMessage.object instanceof MyBookingDeleteApi.ApiResponse) {
                    parseDeleteBookingSuccessResponse((MyBookingDeleteApi.ApiResponse) eventBusMessage.object);
                }
                break;
        }
    }

    private void parseDeleteBookingSuccessResponse(MyBookingDeleteApi.ApiResponse apiResponse) {
        showSnackBar(apiResponse.getMessage());
        getMyPastBooking();
    }

    private void parseCancelBookingSuccessResponse(final MyBookingCancelApi.ApiResponse apiResponse) {
        showSnackBar(apiResponse.getMessage());
        getMyBooking();
        /*final ProgressDialog pd = new ProgressDialog(MyBookingActivity.this);
        pd.setMessage("Please wait..");
        pd.show();
        Handler mHandler = new Handler();
        mHandler.postDelayed(new Runnable() {

            @Override
            public void run() {
                pd.dismiss();
                startApiService(MyBookingDeleteApi.getServiceIntent(MyBookingActivity.this, getToken(), apiResponse.getData().getId()));
            }

        }, 800);*/

    }

    private void parsePastBookingsSuccessResponse(PastBookingsApi.ApiResponse apiResponse) {
        List<PastBookingsApi.ApiResponse.Datum> datumList = apiResponse.getData();
        if (datumList.size() > 0) {
            Collections.sort(datumList, new Comparator<PastBookingsApi.ApiResponse.Datum>()
            {
                @Override
                public int compare(PastBookingsApi.ApiResponse.Datum o1, PastBookingsApi.ApiResponse.Datum o2) {
                    return o1.getId() > o2.getId() ? -1 : (o1.getId() < o2.getId() ) ? 1 : 0;
                }
            });
            mRVPastBookings.setAdapter(mBaseRecyclerAdapterMyPastBookings);
            mBaseRecyclerAdapterMyPastBookings.setItems(datumList);
        } else {
            mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
                @Override
                protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                    viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
                    viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
                    viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
                   // viewHolder.mCustomButton.setText(R.string.try_again);
                    viewHolder.refreshText.setText(R.string.swipe);
                    viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                           // getMyPastBooking();
                        }
                    });
                }
            });
        }
    }

    private void parseMyBookingsSuccessResponse(MyBookingsApi.ApiResponse apiResponse) {
       // mCourtDataList = apiResponse.getData();
        List<MyBookingsApi.ApiResponse.Datum> datumList = apiResponse.getData();
        if (datumList.size() > 0) {
            Collections.sort(datumList, new Comparator<MyBookingsApi.ApiResponse.Datum>()
            {
                @Override
                public int compare(MyBookingsApi.ApiResponse.Datum o1, MyBookingsApi.ApiResponse.Datum o2) {
                    return o1.getId() > o2.getId() ? -1 : (o1.getId() < o2.getId() ) ? 1 : 0;
                }
            });

            mRVOngoingBookings.setAdapter(mBaseRecyclerAdapterMyBookings);
            mBaseRecyclerAdapterMyBookings.setItems(datumList);
        } else {
            mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
                @Override
                protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                    viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_booking_place_holder);
                    viewHolder.mCustomTextViewTitle.setText(R.string.no_bookings_available_title);
                    viewHolder.mCustomTextViewDescription.setText(R.string.no_bookings_available_description);
                    //viewHolder.mCustomButton.setText(R.string.try_again);
                    viewHolder.refreshText.setText(R.string.swipe);
                    viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            //getMyBooking();
                        }
                    });
                }
            });
        }
    }

    private void parseError500Response(BaseApi.Error500Response error500Response) {
        showAlertDialog(R.string.session_timeout_title, R.string.session_timeout_message, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                logout();
            }
        });
    }

    private void parseErrorResponse(BaseApi.DefaultErrorResponse defaultErrorResponse) {
        showSnackBar(defaultErrorResponse.getMessage());
    }

    @Subscribe(threadMode = ThreadMode.MAIN)
    public void noInternet(String message) {
        mRVOngoingBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
            @Override
            protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_internet_placeholder);
                viewHolder.mCustomTextViewTitle.setText(R.string.connection_problem_title);
                viewHolder.mCustomTextViewDescription.setText(R.string.connection_problem_description);
                viewHolder.refreshText.setText(R.string.swipe);
                //viewHolder.mCustomButton.setText(R.string.try_again);
                viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // getMyBooking();
                    }
                });
            }
        });
        mRVPastBookings.setAdapter(new BaseEmptyRecyclerAdapter<EmptyViewHolderRefresh>(EmptyViewHolderRefresh.class, R.layout.layout_place_holderrefresh) {
            @Override
            protected void populateEmptyViewHolder(EmptyViewHolderRefresh viewHolder) {
                viewHolder.mAppCompatImageView.setImageResource(R.drawable.no_internet_placeholder);
                viewHolder.mCustomTextViewTitle.setText(R.string.connection_problem_title);
                viewHolder.mCustomTextViewDescription.setText(R.string.connection_problem_description);
                viewHolder.refreshText.setText(R.string.swipe);
                //viewHolder.mCustomButton.setText(R.string.try_again);
                viewHolder.mCustomButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                       // getMyPastBooking();
                    }
                });
            }
        });
    }
}

并且 activity_my_booking 布局是:

 <?xml version="1.0" encoding="utf-8"?>

<android.support.v4.widget.SwipeRefreshLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/swipe_refresh_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/coordinatorLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <include layout="@layout/layout_toolbar" />

        <include layout="@layout/content_my_booking" />
    </android.support.design.widget.CoordinatorLayout>
</android.support.v4.widget.SwipeRefreshLayout>

你的实现方式太错了!在这种情况下你不应该使用两个RecyclerViews。你可以通过在RecyclerView的适配器中使用不同的视图类型来实现相同的效果,这样做会更好。 - hardartcore
@hardartcore,您能稍微解释一下吗? - Aarks
只是一个提示,永远不要在NestedScrollView内使用recyclerview(s),否则会导致UI性能问题。 - Mohammed Farhan
问题解决了吗? - Jins Lukose
4个回答

0

将第一个 RecyclerView 的高度设置为 wrap_content,并将 setNestedScrollingEnabled 设置为 false。

RecyclerView rv_ongoing_bookings= (RecyclerView) findViewById(R.id.rv_ongoing_bookings);
rv_ongoing_bookings.setNestedScrollingEnabled(false);

不,它没有起作用。RecyclerView仍然只显示第一个项目,并且没有展开到其完整高度。使用这行代码"app:layoutManager="android.support.v7.widget.LinearLayoutManager""的目的是什么?这是问题的原因吗? - Aarks
它用于为RecyclerView设置布局管理器,如果您在Java中也设置了布局管理器,则无需在此处提及。 - Adam
如果你想的话,你可以删除那一行代码recyclerView.setLayoutManager(new LinearLayoutManager(this)); - Manohar
我在Java代码中使用了以下三行: DividerItemDecoration mDividerItemDecorationMyBookings = new DividerItemDecoration(this, LinearLayoutManager.VERTICAL); mDividerItemDecorationMyBookings.setDrawable(ContextCompat.getDrawable(this, R.drawable.divider)); mRVOngoingBookings.addItemDecoration(mDividerItemDecorationMyBookings); - Aarks
这是为了在项目之间添加分隔线。 - Manohar
我提供的解决方案一定有效,请在问题中添加您的Java代码。 - Manohar

0
以下代码将使回收视图可展开...
public class ExpandableRecyclerView extends RecyclerView
{
private boolean expanded = false;

public ExpandableRecyclerView(Context context, AttributeSet attrs, int defStyle)
{
    super(context, attrs, defStyle);
}

public ExpandableRecyclerView(Context context)
{
    super(context);
}

public ExpandableRecyclerView(Context context, AttributeSet attrs)
{
    super(context, attrs);
}

public boolean isExpanded()
{
    return expanded;
}

@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
    if (isExpanded())
    {
        int expandSpec = MeasureSpec.makeMeasureSpec(MEASURED_SIZE_MASK, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

        ViewGroup.LayoutParams params = getLayoutParams();
        params.height = getMeasuredHeight();
    }
    else
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}

public void setExpanded(boolean expanded)
{
    this.expanded = expanded;
}
}

使用方法...像使用recycler view一样使用它... 只需设置recyclerView.setExpanded(true);

您可以直接在scrollview中使用它...


我需要将这段代码放入新的类中,然后像 mRvOngoingBookings.setExpanded(true); 这样使用它吗? - Aarks
如果可能,为两个 RecyclerView 替换并使用这个类。然后将 setExpandable 设置为 true,用于这两个 RecyclerView。它与 RecyclerView 相同,它可能会对您有所帮助。 - Amit Jangid
好的,让我试一下这个。 - Aarks

0

所以,这并不是回答你问题的真正答案,更像是一个建议:根据你在问题中包含的截图,使用 RecyclerView 会更合适。

你其实不需要创建两个 RecyclerView 来实现所需的布局。我理解你想要显示某些项目,并根据某些内容(如预订日期)放置带有分隔符和文本的内容。

RecyclerView.Adapter 中,你可以使用 getItemViewType 返回一个整数值,该值取决于某些变量。例如,你的 getItemViewType 应该长这样:

@Override
public int getItemViewType(int position) {
    MyObject myObject = mItems.get(position);
    // myObject.isSeparator() is a sample function which helps you identify it you should show construct a booking view or separator
    if(myObject.isSeparator()){
        // this variable is declared inside your Adapter ->
        // private static final int VIEW_TYPE_SEPARATOR = 1;
        return VIEW_TYPE_SEPARATOR;
    }
    // private static final int VIEW_TYPE_BOOKING = 0;
    return VIEW_TYPE_BOOKING;
}

根据这些值,您需要创建两个ViewHolder
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    if (VIEW_TYPE_SEPARATOR == viewType) {
       new SeparatorViewHolder(/* Some params which you need here */);
    }
    return new BookingViewHolder(/* Some other params which you need here */);
}

And ->

@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) {
    if (VIEW_TYPE_SEPARATOR == getItemViewType(position)) {
        // Populate SeparatorViewHolder
    } else {
        // Populate BookingViewHolder
    }
}

最后,您应该使用所需对象填充您的List,以确定该项是例如预订项还是分隔符。

我希望您已经掌握了主要思想。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接