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()只被調用一次。我向你展示的這個例子是最好的方式。 –