2011-01-12 42 views
1

用簡單的英語,我有一個textview,當我點擊它時我希望它展開,當我再次單擊它時,我希望它壓縮。我怎樣才能做到這一點?我已經嘗試了下面的內容,但是在最後一行關於擴展器的警告可能不會在holderFinal.text.setOnClickListener(expander)上初始化;如何使遞歸onClickListener進行展開和摺疊?

所以,現在的代碼:


final View.OnClickListener expander = new View.OnClickListener() { 
@Override 
    public void onClick(View v) { 
    holderFinal.text.setText(textData); 
    holderFinal.text.setOnClickListener(new View.OnClickListener() {  
    @Override 
     public void onClick(View v) {          
     holderFinal.text.setText(shortText); 
     holderFinal.text.setOnClickListener(expander); 
     } 
    }); 
} 
}; 
+1

可能用「this」代替擴展器 – 2011-01-12 19:51:19

+0

DUH !!!那麼這讓我進一步了,但不是它擴大,崩潰,然後拒絕擴大....更多調試 – hunterp 2011-01-12 19:58:42

回答

3

無需使用嵌套的覆蓋,如果您可以使用標籤屬性:

const int COLLAPSED = 0; 
const int EXPANDED = 1; 
// set initial value(s) somewhere 
holderFinal.setTag(COLLAPSED); 
holderFinal.text.setText(shortText); 


holderFinal.text.setOnClickListener(new View.OnClickListener() {  
@Override 
    public void onClick(View v) { 
    int i = (int)holderFinal.getTag(); 
    if (i == EXPANDED) 
    { 
     holderFinal.setTag(COLLAPSED); 
     holderFinal.text.setText(shortText); 
    } 
    else 
    { 
     holderFinal.setTag(EXPANDED); 
     holderFinal.text.setText(textData); 
    } 
    } 
}); 
0

Coulnd't你只是找到了,如果你在壓縮或擴張狀態是?如果是這樣,只是

​​

或類似的東西:)去

0

這裏是解決方案:

 
    holder.text.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        final View.OnClickListener ref = this; 
        holderFinal.text.setText(textData); 
        holderFinal.text.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) { holderFinal.text.setText(shortText); holderFinal.text.setOnClickListener(ref); } }); } });