Android: сбой OnClickListener, OnTouchListener

Я хотел проверить, как динамически менять представления на Android, не запуская другое действие.

Итак, я написал этот код, и он зависал всякий раз, когда я реализовывал OnTouchListener и OnClickListener вместе, но если я использовал только один из них, он работал нормально (хотя он не делал того, что я хотел).

public class Test extends Activity implements OnTouchListener, OnClickListener {

ImageView image;
Button ret;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.displaytest);

    image = (ImageView) this.findViewById(R.id.image01);
    ret = (Button) this.findViewById(R.id.ret);

    image.setOnTouchListener(this);
    ret.setOnClickListener(this);
}

@Override
public boolean onTouch(View v, MotionEvent event) {

    int action = event.getAction();

    switch(action)
    {
    case MotionEvent.ACTION_DOWN:
        setContentView(R.layout.returnd);
        break;
    }

    return true;
}

@Override
public void onClick(View v) {

    setContentView(R.layout.displaytest);
}

}

По сути, я просто хотел отобразить изображение, и когда пользователь коснулся его, изменить вид, чтобы отобразить кнопку, которая позволяет вернуться к основному виду.

Кстати, я новичок в Android, поэтому я думаю, что это должна быть довольно хромая ошибка. Помощь будет оценена. Спасибо


person DDL    schedule 04.07.2013    source источник
comment
Пожалуйста, покажите вывод ошибки из LogCat. Трудно сказать, где что-то не так   -  person Leon Joosse    schedule 04.07.2013


Ответы (3)


Пожалуйста, удалите методы setContentView() в событии onTouch и onCLick. Это вызывает проблему. Вы не можете установить просмотр содержимого несколько раз в действии. Вы можете увидеть динамические изменения в пользовательском интерфейсе, используя любые другие методы, такие как изменение текста в текстовом представлении, изменение цвета или изменение изображений в представлении изображений и т. д.

person Sreejith B Naick    schedule 04.07.2013

Я не думаю, что вы можете вызывать setContentView несколько раз.

Вы должны сделать кнопку невидимой в макете и сделать ее видимой при касании изображения вместо загрузки нового макета.

person Jong    schedule 04.07.2013

Без трассировки стека (logcat) вы не получите качественного ответа.

Кстати: новый макет = новое действие (или фрагмент). НЕ setContentView()

Период.

person Waza_Be    schedule 04.07.2013