2011-01-12 10 views
1

Im Klartext, ich habe eine Textansicht, und wenn ich darauf klicke, möchte ich es erweitern, und wenn ich noch einmal darauf klicke, möchte ich es komprimieren. Wie kann ich das machen? Ich habe versucht, die unten, aber es warnt auf die letzte Zeile über Expander möglicherweise nicht auf holderFinal.text.setOnClickListener (Expander) initialisiert werden;Wie erstellt man einen rekursiven onClickListener zum Expandieren und Reduzieren?

So, jetzt den Code:


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

wahrscheinlich ersetzt expander mit "dieser" –

+0

DUH !!! Nun, das hat mich weiter gebracht, aber nicht expandiert, kollabiert, und weigert sich dann zu erweitern .... mehr debugging – hunterp

+0

Warte .... das bedeutet das innere also wie bekomme ich den äußeren Hörer? – hunterp

Antwort

3

Keine Notwendigkeit, verschachtelte Überschreibungen zu verwenden, wenn Sie die Tag-Eigenschaft verwenden können:

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 Sie nur, wenn Sie in einem komprimierten oder expandierten Zustand sind erfahren? Wenn ja, gehen Sie einfach mit

final View.OnClickListener expander = new View.OnClickListener() { 
@Override 
    public void onClick(View v) { 
    if(inCompressedState(v){ 
     holderFinal.text.setText(textData); 
    }else{ 
     holderFinal.text.setText(shortText); 
    } 
    } 
}; 

oder dass so etwas wie :)

+0

Dieser Code würde nicht kompilieren: new View.OnClickListener() { } else { – hunterp

+0

Haha, ich habe es gerade quicky eingegeben, es gibt bestimmt etwas} und (fehlt, wenn du es nicht debuggen kannst, werde ich geben es ist eine Überprüfung, aber es ist die Idee, die ich anbot ... – Nanne

+0

hows das? reparierte einige der Sachen – Nanne

0

Hier ist die Lösung:

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

Verwandte Themen