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
顶部和屏幕中央。空视图可以是 TextView
或 ImageView
或任何你想要的。
<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 即可。
我有两个布局 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
顶部和屏幕中央。空视图可以是 TextView
或 ImageView
或任何你想要的。
<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 即可。