Java Android Studio在更改布局后使用setOnTouchListener
我喜欢左右滑动以切换活动的布局。但是在切换布局后,Java Android Studio在更改布局后使用setOnTouchListener,java,android,android-studio,ontouchlistener,Java,Android,Android Studio,Ontouchlistener,我喜欢左右滑动以切换活动的布局。但是在切换布局后,setOnTouchListener停止工作。什么是我的错 我的活动: import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.fragment.app.Fragment; import android.os.Bundle; import android.vi
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);
}
}
}
});
}
}
导入androidx.appcompat.app.appcompat活动;
导入androidx.constraintlayout.widget.constraintlayout;
导入androidx.fragment.app.fragment;
导入android.os.Bundle;
导入android.view.LayoutInflater;
导入android.view.view;
公共类MainActivity扩展了AppCompatActivity{
静态碎片;
专用int页码;
私人有限责任公司;
私家景厂;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.instruction_1);
cl=findViewById(R.id.布局);
页码=0;
cl.setOnTouchListener(新的OnSwipeTouchListener(MainActivity.this){
公共权利{
如果(页码!=0)
页码=页码-1;
如果(页码==0){
setContentView(R.layout.instruction_1);
factory=GetLayoutFlater().充气(R.layout.instruction_1,null);
cl=工厂findViewById(R.id.布局);
}
else if(页码==1){
setContentView(R.layout.instruction_2);
factory=GetLayoutFlater().充气(R.layout.instruction_2,null);
cl=工厂findViewById(R.id.布局);
}
}
公共void onswitpeleft(){
如果(pagenumber当您将布局文件替换为另一个布局文件时,当您仍然引用旧的受约束布局(现在已不存在)时,第一次刷卡后应用程序不工作的原因是bcz
您正在尝试实现片段的行为
您不应该完全替换布局文件,而应该在xml文件中创建一个布局并替换它,或者只使用ViewPager
我想你在找这样的东西。
试试看
因为您正在使用setContentView(R.layout.instruction_1);
更改整个布局,您想实现什么?@Makarand我想用刷卡来更改活动的布局。像一本书一样,您只有3页吗?@Makarand是的,只有3页
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;
}
}
});
}
}