2011-12-01 22 views
6

Kişinin iletişim geçmişini depolayan bir liste görünümüm var. Bir düzenleme metnine ve bir gönder düğmesine sahip bir mesaj editörü olarak hareket eden bir liste görünümünün içinde bir başlık var. Bir kullanıcı bir şey yazdığında ve gönder düğmesine basıldığında, mesajlar iletişim listesine eklenir ve editör boşalır.ListView'in ClassCastException veren üstbilgilerinin başlıkları

Kullanıcı, gönder düğmesine bastığında istediğim editörün görünmez hale gelmesi ve Öğenin liste görünümüne eklenmesinin gerekmesidir. Bundan sonra editör, aşağıdaki öğeleri hareket ettirme hissini veren en üst seviyeden yavaş yavaş gelmelidir.

Başlıkta bir çeviri animasyonu gerçekleştirdim, ancak ne yaptığını, öğeleri aşağı itip, sonra da istemediğim alanı yavaş yavaş doldurarak alanı açıyor.

this question'da açıklanan negatif kenar boşluğu kandırdım ama benim için çalışmadı. Başlıklar için AbsListView.LayoutParam diğer düzen params kullanamazsınız. Diğer paramları ayarlamayı denedim ama animasyon yaparken ClassCastException veriyor. ListView içinde yazılan kodun istisnasını ve bunun kodlarını takip ettim, bu paramları absListView.LayoutParams ile clearRecycledState() yöntemiyle yapmaya çalışıyorlar. Veya liste görünümünde kenar boşluklarını destekleyen düzen paramları uygulamanın bir yolu var mı?

public class PageListView extends ListView { 
    private Application app; 
    private CommListAdapter listAdapter; 
    private MessageEditorHeader messageEditorHeader; 
    private MessageItemLongClick mInterface; 
    private Handler handler; 

public ProfilePageListView(Application app, MessageItemLongClick mInterface) { 
    super(app); 
    this.app = app; 
    this.mInterface = mInterface; 
    this.handler = new Handler(); 
    setupView(); 
} 

public void applyData(ProfileData data){ 

    listAdapter.applyData(data.getUser()); 
    // some other business logic   
} 

private void setupView() { 

    messageEditorHeader = new MessageEditorHeader(app); 
    addHeaderView(messageEditorHeader); 

    listAdapter = new CommListAdapter(app, mInterface); 
    setAdapter(listAdapter); 
    setDivider(null); 
    setScrollingCacheEnabled(false); 

    tAnimation = new TranslateAnimation(0.0f, 0.0f, -90.0f, 0.0f); 
    tAnimation.setZAdjustment(-1); 
    tAnimation.setDuration(1500); 
} 

// this gets called whenever the communication gets added to the listview. 
public void onNewCommunication(Communication lc) { 
    listAdapter.onNewCommunication(); 

    if(lc != null && lc.isOutgoing() && !lc.getType().isCall()){    
     getMessageEditor().startNewMessage(); 
     messageEditorHeader.setVisibility(VISIBLE); // this is overriden method here I m toggling the height 1px and WRAP_CONTENT 
     messageEditorHeader.startAnimation(tAnimation); 
    } 
} 

// few more methods are there. 
} 

heres mesaj editörü kod

public class MessageEditorHeader extends RelativeLayout { 
private MessageEditor msgEditor; 

public MessageEditorHeader(AppteraApplication context) { 
    super(context); 
    msgEditor = new MessageEditor(context); // Its a relative layout containing edit text and the send button 
    addView(msgEditor); 
} 

public MessageEditor getMsgEditor() { 
    return msgEditor; 
} 

public void setProgress(int progress){ 
    msgEditor.setProgress(progress); 
} 

@Override 
public void setVisibility(int visibility) { 
    this.visibility = visibility; 
    if (visibility == View.VISIBLE) { 
     ListView.LayoutParams params = new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, ListView.LayoutParams.WRAP_CONTENT); 
     setLayoutParams(params); 
    } 
    else { 
     ListView.LayoutParams params = new ListView.LayoutParams(ListView.LayoutParams.FILL_PARENT, 1); 
     setLayoutParams(params); 
    } 
} 
} 
+0

Çeviri animasyon dosyanızı yayınlayabilir misiniz, böylece çalışmasını sağlamak için bir yol düşünebilir miyiz? – DallaRosa

+0

Soruyu düzenledim, koda bakabilirsiniz. Onun basit bir çevirme animasyonu burada yapıyorum. – wasaig

+0

kodunuzda listView.addHeaderView (headerlayout) kullanıyor musunuz? Eğer evet ise o zaman görünür ve görünür olabilir ve üstbilginin düzeninde hiçbir sorun ayarına sahip olmadan gönderme düğmesi olayları – bindal

cevap

1

yerine farklı bir yaklaşım düşündünüz mü kodu? Belki de editör görünümünü listenin en üst kısmına yerleştirebilir, ancak ekranın dışına çıkarabilir ve sonra geçiş yapmak için smoothScrollToPosition'u kullanabilirsiniz. Yani gerçekte sadece listeyi kaydırıyorsunuzdur, ancak etki sizin aradığınız şey olabilir. .

İlgili konular