Как сделать рекурсивный onClickListener для расширения и свертывания?

1

На простом английском языке у меня есть текстовое представление, и когда я нажимаю на него, я хочу, чтобы он расширялся, и когда я снова нажимаю на него, я хочу, чтобы он сжался. Как я могу это сделать? Я пробовал следующее, но он предупреждает о последней строке об экспандере, возможно, не будет инициализироваться на файле holderFinal.text.setOnClickListener(расширитель);

Итак, теперь код:


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
    вероятно, замените расширитель на "это"
  • 0
    ДУХ !!! Ну, это дало мне дальше, но не расширяется, не разрушается, а затем отказывается расширяться .... больше отладки
Показать ещё 2 комментария
Теги:

3 ответа

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

Вот решение:


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

Не могли бы вы узнать, находитесь ли вы в сжатом или расширенном состоянии? Если да, просто ходите с

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

или что-то в этом роде:)

  • 0
    Этот код не будет компилироваться: new View.OnClickListener () {} else {
  • 0
    Ха-ха, я только что набрал его быстро, некоторые обязательно должны быть} и (не хватает, если вы не можете отладить его, я дам ему чек, но это идея, которую я предлагал ...
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню