2016-04-11 15 views
0

Böyle bir Android Düzeni vardır: Kardeş pozisyonu değiştiğinde android görünümü nasıl yenilenir?

<LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/main_layout" 
     android:orientation="vertical"> 
<android.support.v7.widget.RecyclerView 
      android:id="@+id/rv_weighing" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_weight="1"/> 
<android.support.v7.widget.CardView 
      xmlns:card_view="http://schemas.android.com/apk/res-auto" 
      android:id="@+id/cv_price_holder" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"> 

<!-- another view elements here --> 
</android.support.v7.widget.CardView> 

</LinearLayout> 

Temelde ben ilk eleman üst ve ikinci eleman arasında kalan boşluğu doldurmak istiyoruz. Çalışma zamanında ikinci elemanın Y konumunu değiştirene kadar iyi çalışıyor. Hem ebeveyn hem de ilk öğe üzerinde .invalidate() ve .requestLayout()'u aramayı denedim ancak beklendiği gibi çalışmıyor gibi görünüyor.

Ayrıca, <RelativeLayout> kullanarak üst düzeni değiştirmeyi ve android:layout_above="@+id/cv_price_holder"'u ilk öğeye ayarlamayı denedim, ancak işe yaramadı.

DÜZENLEME:

public void togglePriceHolder(){ 
     float newY = mPriceHolderToggleState ? -mPriceHolderToggleLimitY : mPriceHolderToggleLimitY; 
     int newIcon = mPriceHolderToggleState ? R.drawable.ic_keyboard_arrow_down_white_36dp : R.drawable.ic_keyboard_arrow_up_white_36dp; 
     mBtnTogglePriceHolder.setImageResource(newIcon); 
     mCvPriceHolder.animate().translationYBy(newY).setListener(new Animator.AnimatorListener() { 
      @Override 
      public void onAnimationStart(Animator animation) {} 

      @Override 
      public void onAnimationEnd(Animator animation) { 
       // refresh the layout 
       rvWeighing.forceLayout(); 
       mMainLayout.requestLayout(); 
      } 

      @Override 
      public void onAnimationCancel(Animator animation) {} 

      @Override 
      public void onAnimationRepeat(Animator animation) {} 
     });  
     mPriceHolderToggleState = !mPriceHolderToggleState; 
} 

ilk unsur onun yüksekliğini ikinci eleman değişikliğinin Y konumu ayarlayabilirsiniz böylece soru nasıl düzen yenileyebilirsiniz edilir: Burada düzenini değiştirmek için çağrılan yöntemdir? peşin

Teşekkür

enter image description here

cevap

3

boyutları değiştirin ve sonra requestLayout() çağırarak olabilir görünümlerde forceLayout() aramayı deneyin. requestLayout() bir görünümde denir

, bu görünüme bütün veliler yeniden çizilmesi, ancak kardeşler belirli görünümü, (varsayılan geçişi ile birlikte) bir sonraki düzen geçiş için görüntülemek işaretleri üzerinde forceLayout() çağıran değildir. Özel durumunuzda, yeniden çizmek istediğiniz kardeşler üzerinde forceLayout() numaralı telefonu çağırmayı deneyin ve ardından görünümlerden birinden requestLayout() numaralı telefonu arayın.

+0

Merhaba Sarthak, yardımlarınız için teşekkürler, ancak hala işe yaramayacağım. Düzeni değiştirirken kullandığım yöntemi eklemek için soruyu düzenledim. Yanlış mı yapıyorum? – qatz

+0

@qatz deneyebileceğiniz tek şey, mMayLayout yerine mCvPriceHolder üzerinde requestLayout çağırmaktır ve geç cevap için özür dilerim ... –

İlgili konular