Alertdialog正在膨胀的RecyclerView android

Alertdialog正在膨胀的RecyclerView android,android,android-alertdialog,android-recyclerview,Android,Android Alertdialog,Android Recyclerview,我试图使用setView(…)将视图添加到我的材质对话框中,我希望我的膨胀视图如下所示 也就是说,recycler视图将始终占据屏幕的大约2/3。这包括何时为空,何时为空空间,何时有多行数据,何时可以滚动 这是我的目标。但是,当我尝试在对话框中放大此视图时,我得到以下结果 该屏幕表示占据屏幕大部分的空recyclerview 这是密码 //添加到对话框 mMaterialDialog = new MaterialDialog(mContext) .setView

我试图使用setView(…)将视图添加到我的材质对话框中,我希望我的膨胀视图如下所示

也就是说,recycler视图将始终占据屏幕的大约2/3。这包括何时为空,何时为空空间,何时有多行数据,何时可以滚动

这是我的目标。但是,当我尝试在对话框中放大此视图时,我得到以下结果

该屏幕表示占据屏幕大部分的空recyclerview

这是密码

//添加到对话框

mMaterialDialog = new MaterialDialog(mContext)

               .setView(new ISEQDialog(mContext))
                       //.setBackgroundResource(R.drawable.dublin_watchlist)
               .setPositiveButton("OK", new View.OnClickListener() {
                   @Override
                   public void onClick(View v) {
                       mMaterialDialog.dismiss();

                   }
               });


       mMaterialDialog.show();
   }
}))

//看法

 public class ISEQDialog extends FrameLayout{

    SeekBar mBuySeekBar;
    TextView mStockHeading;
    Context mContext;
    View mView;
    RecyclerView mStockDataList;

    public ISEQDialog(Context context) {
        super(context);
        this.mContext = context;

        LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if(inflater != null){
            mView =  inflater.inflate(R.layout.stock_dialog, null);
        }

        mStockDataList = (RecyclerView) mView.findViewById(R.id.rv_stock_data_list);
        //
        mStockDataList.setAdapter(new ISEQDialofRecyclerViewAdapter());
        LinearLayoutManager layoutManager = new LinearLayoutManager(mContext);
        layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        layoutManager.scrollToPosition(0);
        mStockDataList.setLayoutManager(layoutManager);
        //mStockDataList.addItemDecoration(new DividerItemDecoration(mContext.getDrawable(R.drawable.divider)));


        addView(mView);
      }
    }
//循环水泵

 public class ISEQDialofRecyclerViewAdapter extends      RecyclerView.Adapter<ISEQDialofRecyclerViewAdapter.ViewHolder>{
       @Override
       public ISEQDialofRecyclerViewAdapter.ViewHolder     onCreateViewHolder(ViewGroup parent, int viewType) {
        return null;
    }


    @Override
    public void onBindViewHolder(ISEQDialofRecyclerViewAdapter.ViewHolder holder, int position) {

    }

    @Override
    public int getItemCount() {
        return 0;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {


        public ViewHolder(View itemView) {
            super(itemView);

        }
    }
}
公共类IseQDialOfRecycleServiceAdapter扩展了RecyclerView.Adapter{
@凌驾
public ISEQdialOfRecycleServiceAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
返回null;
}
@凌驾
BindViewHolder上的公共无效(ISEQdialOfRecycleriveAdapter.ViewHolder,int位置){
}
@凌驾
public int getItemCount(){
返回0;
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共视图持有者(视图项视图){
超级(项目视图);
}
}
}
//XML


这个问题与
RecyclerView
有关,据我所知,当它为空时,它会填充布局,除非您给出固定的
布局高度。

有一个技巧,就是在创建
alertDialog
之前检查项目列表。如果为空,则创建
警报对话框
,而不创建
回收视图
,只创建警告文本。否则,创建自定义的
alertDialog

这个问题与
RecyclerView
有关,我知道,当它为空时会填充布局,除非您指定固定的
布局高度。

有一个技巧,就是在创建
alertDialog
之前检查项目列表。如果为空,则创建
警报对话框
,而不创建
回收视图
,只创建警告文本。否则,创建自定义的
警报对话框

我在尝试将回收器视图添加到对话框时遇到了相同的问题。 当我尝试排除故障时,我意识到只有回收器视图适配器的构造函数被调用并停止。其余的方法如getItemCount()、onCreateViewHolder()和onBindViewHolder()不会被调用

所以我做了下面的事情

1) 我将回收视图替换为线性布局。 2) 在代码中将线性布局引用为视图支架。 3) 然后,我手动迭代了要传递给recycler视图的列表,然后我扩展了单行xml文件,引用了视图并在其上设置了文本。 4) 我将视图添加到视图保持架并显示对话框。它起作用了

5) 此操作会扩大视图,因为我们不会回收任何东西,因此如果要显示的项目低于10-15,您也可以使用此操作,否则会稍微影响应用程序的性能

活动中

    Dialog myTestDialog = new Dialog(getActivity());
    myTestDialog.setContentView(R.layout.order_details_orders_to_deliver);

    //get the layout group
    ViewGroup layout = (ViewGroup) myTestDialog.findViewById(R.id.order_details_recycler_view);
    List<OrderItemDetails> orderItemDetailsList = mDatabaseOperationsAdapter.getOrderDetail(ordersToDeliver.getOrderId());

    for (int x = 0; x < orderItemDetailsList.size(); x++) {
        OrderItemDetails orderItemDetails = orderItemDetailsList.get(x);
        View view = inflater.inflate(R.layout.order_details_row, null);
        TextView itemName = (TextView) view.findViewById(R.id.order_details_item_name);

        TextView quantity = (TextView) view.findViewById(R.id.order_details_item_quantity);
        TextView itemTotal = (TextView) view.findViewById(R.id.order_details_item_total);

        itemName.setText(orderItemDetails.getProductName());
        quantity.setText(String.valueOf(orderItemDetails.getProductQuantity()));
        itemTotal.setText(String.valueOf(orderItemDetails.getTotalPrice()));
        layout.addView(view);
    }

    myTestDialog.show();
Dialog myTestDialog=新建对话框(getActivity());
myTestDialog.setContentView(R.layout.order\u details\u orders\u to\u deliver);
//获取布局组
视图组布局=(视图组)myTestDialog.findViewById(R.id.order\u details\u recycler\u view);
List orderItemDetailsList=mDatabaseOperationsAdapter.getOrderDetail(ordersToDeliver.getOrderId());
对于(int x=0;x
注意:order\u details\u recycler\u视图是线性布局而不是recycler视图,因为我将其更改为保持id不变的线性布局


列表orderItemDetailsList是要传递给适配器的列表。

我在尝试将回收器视图添加到对话框时遇到了相同的问题。 当我尝试排除故障时,我意识到只有回收器视图适配器的构造函数被调用并停止。其余的方法如getItemCount()、onCreateViewHolder()和onBindViewHolder()不会被调用

所以我做了下面的事情

1) 我将回收视图替换为线性布局。 2) 在代码中将线性布局引用为视图支架。 3) 然后,我手动迭代了要传递给recycler视图的列表,然后我扩展了单行xml文件,引用了视图并在其上设置了文本。 4) 我将视图添加到视图保持架并显示对话框。它起作用了

5) 此操作会扩大视图,因为我们不会回收任何东西,因此如果要显示的项目低于10-15,您也可以使用此操作,否则会稍微影响应用程序的性能

活动中

    Dialog myTestDialog = new Dialog(getActivity());
    myTestDialog.setContentView(R.layout.order_details_orders_to_deliver);

    //get the layout group
    ViewGroup layout = (ViewGroup) myTestDialog.findViewById(R.id.order_details_recycler_view);
    List<OrderItemDetails> orderItemDetailsList = mDatabaseOperationsAdapter.getOrderDetail(ordersToDeliver.getOrderId());

    for (int x = 0; x < orderItemDetailsList.size(); x++) {
        OrderItemDetails orderItemDetails = orderItemDetailsList.get(x);
        View view = inflater.inflate(R.layout.order_details_row, null);
        TextView itemName = (TextView) view.findViewById(R.id.order_details_item_name);

        TextView quantity = (TextView) view.findViewById(R.id.order_details_item_quantity);
        TextView itemTotal = (TextView) view.findViewById(R.id.order_details_item_total);

        itemName.setText(orderItemDetails.getProductName());
        quantity.setText(String.valueOf(orderItemDetails.getProductQuantity()));
        itemTotal.setText(String.valueOf(orderItemDetails.getTotalPrice()));
        layout.addView(view);
    }

    myTestDialog.show();
Dialog myTestDialog=新建对话框(getActivity());
myTestDialog.setContentView(R.layout.order\u details\u orders\u to\u deliver);
//获取布局组
视图组布局=(视图组)myTestDialog.findViewById(R.id.order\u details\u recycler\u view);
List orderItemDetailsList=mDatabaseOperationsAdapter.getOrderDetail(ordersToDeliver.getOrderId());
对于(int x=0;x