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. Това причинява проблема. Не можете да зададете изглед на съдържание няколко пъти в активност. Можете да видите динамични промени в потребителския интерфейс, като използвате всякакви други методи, като промяна на текст в textVIew, промяна на цвета или промяна на изображения в imageview и т.н.

person Sreejith B Naick    schedule 04.07.2013

Не мисля, че можеш да се обадиш на setContentView няколко пъти по този начин.

Трябва да направите бутона невидим в оформлението и да го направите видим при докосване на картината, вместо да зареждате ново оформление.

person Jong    schedule 04.07.2013

Без Stack Trace (logcat) няма да получите качествен отговор.

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

Месечен цикъл.

person Waza_Be    schedule 04.07.2013