android : 在运行时更改布局屏幕

android : change layout screen in runtime

我有两个布局 xml 文件。在一个布局中,我有 RecyclerView,而另一个布局只有几个文本视图和按钮。现在我的问题是我想在 RecyclerView 为空时更改布局。 RecyclerView 包含产品列表,用户可以通过点击 RecyclerView 每一行中的删除图标来删除这些产品。当用户达到列表的大小为零时,我想将布局更改为包含 your cart is empty please add some products.

等文本的其他布局

我的第一个布局是这样的。

从列表中删除所有项目后,它应该如下所示。我所有的 xml 文件都准备好了。

这是我的一些适配器代码。

onCreateViewHolder

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = layoutInflater.inflate(R.layout.checkout_single_design, parent, false);
    return new ViewHolder(view);
}

delete Icon Click listener

    holder.ivDelete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            openDialog(design);
        }
    });

这里是 openDialog() 方法。这里的设计是我的模型 class.

public void openDialog(final Design design) {
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Confirm");
    builder.setMessage("Remove item from cart?");
    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
            designList.remove(design);
            notifyDataSetChanged();
            saveSharedPref(context, "cart", new Gson().toJson(designList));
            Toast.makeText(context, "deleted", Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();
}

Design.java

public class Design implements Serializable{

    public int id;
    public String qualityId;
    public String qualityName;
    public String designId;
    public String designName;
    public String image;
    public String name; //use as shade name
    public String discPercent;
    public String amount;
    public int pcs;
    public String qty;
}

在 activity 中,我只是将适配器设置为 recyclerView。

co_recycler_view.setLayoutManager(new LinearLayoutManager(CheckOutActivity.this));
co_recycler_view.setHasFixedSize(true);
adapter = new CheckOutAdapter(CheckOutActivity.this, designList);
co_recycler_view.setAdapter(adapter);

希望大家清楚我的问题。我不知道如何实现这一目标。请提出建议。

您应该在您的布局中添加一个空视图,当用户从您的 RecyclerView 中删除所有数据时,您的 Activity 将显示您的视图。 这是您的 MainActivity 的示例,其中包含您的 RecyclerView。请注意,我使用 FrameLayout 使视图保持在 RecyclerView 顶部和屏幕中央。空视图可以是 TextViewImageView 或任何你想要的。

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <android.support.v7.widget.RecyclerView
                    android:id="@+id/recyclerView"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"/>

                <include
                    android:id="@+id/emptyView"
                    layout="@layout/empty_modules" />
            </FrameLayout>

然后,在您的 MainActivity 中,您必须控制 RecyclerView 没有数据时的可见性以及 EmptyView 的可见性。

 if (your_array_data == null || your_data.isEmpty()) {

                loadingView.setVisibility(View.VISIBLE);
                recyclerView.setVisibility(View.GONE);
            } else {
               loadingView.setVisibility(View.GONE);
               recyclerView.setVisibility(View.VISIBLE);
            }

您可以通过多种方式实现这一目标。 1)你可以使用ViewSwitcher。它使用两种布局,您可以来回切换它们。

Here上面有教程

2) 您可以覆盖 activity 中的 setContentView 并在其中实现您的逻辑并从您想要的任何地方调用它。就像您可以在其中设置一个布尔标志并相应地设置布局一样!您不需要重新启动 activity 即可。