1

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

我的第一个布局看起来像这样。

enter image description here

从删除列表中的所有项目后,应该是这样的。我所有的XML文件都准备好了。

enter image description here

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

onCreateViewHolder

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

删除图标点击收听

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

这里是openDialog()方法。这里的设计是我的模特班。

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; 
} 

在活动,我只是设置适配器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); 

我希望我的问题对所有人都清楚。我不知道如何做到这一点。请建议。

回答

0

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

Here是它的教程。2)你可以在活动中覆盖setContentView,并在其中实现你的逻辑并从你想要的任何地方调用它。就像你可以在其中设置一个布尔标志并相应地设置布局!您不需要重新启动活动即可完成此操作。

+0

这意味着我必须在列表为空时创建回调逻辑,然后使用setContentView。正确? –

+0

是的,您可以在用户删除一个项目时检查'RecyclerView'中的项目数量,然后调用'setContentView'(如果它为空),但是记住当您调用它时必须再次绑定您的视图。所以如果我是你,我会选择'ViewSwitcher'。 – Max

0

您应该在布局中添加一个空白视图,当用户从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); 
      } 
+0

我可以更改setContentView运行时 –

+0

不,您不能。 setContentView()只被调用一次。我向你展示的这个例子是最好的方式。 –