На простом английском языке у меня есть текстовое представление, и когда я нажимаю на него, я хочу, чтобы он расширялся, и когда я снова нажимаю на него, я хочу, чтобы он сжался. Как я могу это сделать? Я пробовал следующее, но он предупреждает о последней строке об экспандере, возможно, не будет инициализироваться на файле 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);
}
});
}
};
Нет необходимости использовать вложенные переопределения, если вы можете использовать свойство тега:
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);
}
}
});
Вот решение:
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);
}
});
}
});
Не могли бы вы узнать, находитесь ли вы в сжатом или расширенном состоянии? Если да, просто ходите с
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);
}
}
};
или что-то в этом роде:)