1

두 개의 레이아웃 xml 파일이 있습니다. 한 레이아웃에서 나는 RecyclerView와 다른 레이아웃을 가지고 단지 몇 textViews와 버튼. 이제 내 질문은 RecyclerView가 비어있을 때 레이아웃을 변경하고 싶습니다. RecyclerView에는 RecyclerView의 각 행에있는 삭제 아이콘을 눌러 제거 할 수있는 제품 목록이 있습니다. 사용자가 목록의 크기가 0이되면 레이아웃을 다른 글꼴로 바꾸고 싶습니다. your cart is empty please add some products.android : 런타임에 레이아웃 화면 변경

첫 번째 레이아웃은 다음과 같습니다.

enter image description here

목록에서 모든 항목을 삭제 한 후에는 다음과 같아야합니다. 내 모든 XML 파일이 준비되었습니다.

enter image description here

은 여기 내 어댑터 내 일부 코드입니다.

여기

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

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

삭제 아이콘을 클릭 리스너

onCreateViewHolder 그리고 것은 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 난 그냥 recyclerView에 어댑터를 설정하고 활동에

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

.

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

예, 사용자가 아이템을 삭제 한 후'setContentView'를 비어 있지만 콜을 호출 할 때마다 뷰를 다시 바인딩해야한다는 것을 기억하면'RecyclerView'에서 아이템의 수를 확인할 수 있습니다. 그래서 내가 당신이라면 대신'ViewSwitcher'를 쓸 것입니다. – Max

0

레이아웃에 빈보기를 추가해야합니다. 사용자가 RecyclerView에서 모든 데이터를 삭제하면 Activity에 사용자의보기가 표시됩니다. 여기에 마녀 용 샘플은 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()가 한 번만 호출됩니다. 내가 보여 주는이 예가 그렇게하는 가장 좋은 방법입니다. –