1

2つのレイアウトxmlファイルがあります。あるレイアウトでは、私はRecyclerViewを持っていて、もう一つのレイアウトはtextViewとボタンだけです。今私の質問は、私はRecyclerViewが空のときに私のレイアウトを変更したいです。 RecyclerViewには、RecyclerViewの各行にある削除アイコンをタップして削除できる製品のリストが含まれています。ユーザーがリストのサイズゼロに達すると、レイアウトを他のテキストに変更する場合があります。your cart is empty please add some products.アンドロイド:実行時にレイアウト画面を変更する

私の最初のレイアウトはこのようになります。

enter image description here

リストからすべての項目を削除した後、それは次のようになります。私のすべてのXMLファイルが準備完了です。

enter image description here

は、ここに私のアダプタの私のいくつかのコードです。

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

onCreateViewHolder削除アイコンをクリックしてリスナー

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

そして、ここではopenDialogの()メソッドです。ここでDesignは私のモデルクラスです。活動で

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を使用できます。 2つのレイアウトを使用し、前後に切り替えることができます。

Hereは、そのチュートリアルです。

2)アクティビティ内でsetContentViewをオーバーライドし、ロジックを実装してどこからでも呼び出すことができます。あなたはそれにブール値のフラグを設定し、それに応じてレイアウトを設定することができますように!それを行うためにアクティビティを再起動する必要はありません。

+0

これは、リストが空のときにコールバックロジックを作成してから、setContentViewを使用する必要があることを意味します。正しい? –

+0

はい、ユーザーが項目を削除した後に 'setContentView'を空にすると' RecyclerView'の項目数を確認できますが、呼び出すたびに再度ビューをバインドする必要があります。もし私があなただったら私は代わりに 'ViewSwitcher'に行くでしょう。 – Max

0

レイアウトに空のビューを追加する必要があります。ユーザーがRecyclerViewからすべてのデータを削除すると、Activityに表示されます。 あなたのMainActivity魔女のサンプルはRecyclerViewです。私はRecyclerViewの上と画面の中央に表示するためにFrameLayoutを使用しています。空のビューは、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あなたはそれが何のデータと同様にあなたのEmptyViewの可視性を持っていないときにRecyclerViewの可視性を制御する必要があります。

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()は1回だけ呼び出されます。私があなたに示すこの例は、それを行う最善の方法です。 –

関連する問題