Android Студия использует setOnTouchListener после изменения макета - PullRequest
0 голосов
/ 17 февраля 2020

Мне нравится проводить пальцем вправо, влево, чтобы переключить макет моей активности. Но после переключения макета один раз setOnTouchListener перестает работать. В чем моя вина?

Моя активность:

import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.fragment.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    static Fragment fragment;
private int pagenumber;
private ConstraintLayout cl;
    private View factory;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.instruction_1);


        cl = findViewById(R.id.layout);
        pagenumber= 0;


        cl.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) {

            public void onSwipeRight() {
                if (pagenumber != 0)
                    pagenumber = pagenumber - 1;
                if(pagenumber==0){
                    setContentView(R.layout.instruction_1);
                    factory = getLayoutInflater().inflate(R.layout.instruction_1, null);

                    cl = factory.findViewById(R.id.layout);
                }
              else if(pagenumber==1){
                    setContentView(R.layout.instruction_2);
                    factory = getLayoutInflater().inflate(R.layout.instruction_2, null);
                    cl = factory.findViewById(R.id.layout);
              }

            }
            public void onSwipeLeft() {
                if(pagenumber<2) {
                    pagenumber = pagenumber + 1;


                     if (pagenumber==1){
                         setContentView(R.layout.instruction_2);
                         factory = getLayoutInflater().inflate(R.layout.instruction_2, null);
                         cl = factory.findViewById(R.id.layout);
                    }
                    else if (pagenumber==2){
                         setContentView(R.layout.instruction_3);
                         factory = getLayoutInflater().inflate(R.layout.instruction_3, null);
                         cl = factory.findViewById(R.id.layout);
                    }
                }

            }


        });

    }
}

1 Ответ

0 голосов
/ 17 февраля 2020

Почему приложение не работает после первого пролистывания, это bcz, когда вы проводите, когда вы заменяете файл макета другим, если у вас все еще есть ссылка на старый ограниченный макет, которого больше нет.

Вы пытаетесь Для реализации поведения Фрагменты

Не следует полностью заменять файл макета, вместо этого создайте макет внутри файла xml и замените его. Или просто используйте ViewPager * 1008. *.

Я думаю, вы ищете что-то подобное. Попробуйте

 public class MainActivity extends AppCompatActivity {

static Fragment fragment;
private int pagenumber;
private ConstraintLayout cl;
private View factory;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.instruction_1);


    cl = findViewById(R.id.layout);
    pagenumber = 0;


    cl.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) {

        public void onSwipeRight() {
            if (pagenumber == 0) {
                setContentView(R.layout.instruction_1);
                pagenumber = 1;
            } else if (pagenumber == 1) {
                setContentView(R.layout.instruction_2);
                pagenumber = 2;
            } else if (pagenumber == 2) {
                setContentView(R.layout.instruction_3);
                pagenumber = 3;
            }
        }

        public void onSwipeLeft() {
           if (pagenumber == 1) {
                setContentView(R.layout.instruction_0);
                pagenumber = 0;
            } else if (pagenumber == 2) {
                setContentView(R.layout.instruction_1);
                pagenumber = 1;
            }else if (pagenumber == 3) {
                setContentView(R.layout.instruction_2);
                pagenumber = 2;
            }

        }
    });
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...