Java 切换到另一个活动,但刷卡不起作用

Java 切换到另一个活动,但刷卡不起作用,java,android,Java,Android,我的要求:- 我有两个活动。当我刷卡时,它将转到另一个活动 因此,我:-- MainActivity.java public class MainActivity extends Activity { private GestureDetectorCompat gestureDetectorCompat; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstan

我的要求:- 我有两个活动。当我刷卡时,它将转到另一个活动

因此,我:-- MainActivity.java

public class MainActivity extends Activity {

 private GestureDetectorCompat gestureDetectorCompat;

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

  gestureDetectorCompat = new GestureDetectorCompat(this, new MyGestureListener());
 }

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  this.gestureDetectorCompat.onTouchEvent(event);
        return super.onTouchEvent(event);
 }

 class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
  //handle 'swipe left' action only

        @Override
        public boolean onFling(MotionEvent event1, MotionEvent event2, 
                float velocityX, float velocityY) {


         if(event2.getX() < event1.getX()){


          //switch another activity
             Intent intent = new Intent(
               MainActivity.this, Join_form.class);
             startActivity(intent);
             finish();
         }

            return true;
        }
    }
}
public class Join_form extends  Activity {

     private GestureDetectorCompat gestureDetectorCompat;

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

      gestureDetectorCompat = new GestureDetectorCompat(this, new MyGestureListener());
     }

     @Override
     public boolean onTouchEvent(MotionEvent event) {
      this.gestureDetectorCompat.onTouchEvent(event);
            return super.onTouchEvent(event);
     }

     class MyGestureListener extends GestureDetector.SimpleOnGestureListener {
      //handle 'swipe left' action only

         @Override
            public boolean onFling(MotionEvent event1, MotionEvent event2, 
                    float velocityX, float velocityY) {

                  if(event2.getX() > event1.getX()){


                   //switch another activity
                      Intent intent = new Intent(
                              Join_form.this, MainActivity.class);
                      startActivity(intent);
                      finish();
                  }

                return true;
            }
        }
    }
活动\u getservice.xml是:--


activity_main.xml是:--


但是我不能刷这一页。它不会转到另一页。为什么会这样?
问题出在哪里?

您可能应该更改体系结构,将2个活动转换为片段,并将它们放在viewPager中。viewPager将为您处理滑动部件。

同意@k3v1n4ud3。让我稍微扩展一下,因为我不能真正评论,因为缺乏业力

有了ViewPager(MainActivity.java内部)+MainFragment(Fragment)+JoinForm(Fragment),您就可以在没有监听器的情况下离开。它会自动为您处理刷卡部分

试想一下:你有一个大脑(主要活动w/ViewPager)和两只手臂(你正在实现的第一个和第二个片段)

  • 创建包含ViewPager的MainActivity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    myViewPager = (ViewPager) findViewById(R.id.myViewPager);
    
    //somehow fill the adapter
                        MyAdapter myAdapter = new MyAdapter(getSupportFragmentManager(), getApplicationContext()); //=== required as per the MyAdapter class
    
                        //set the adapter
                        myViewPager.setAdapter(myAdapter);
    
                        // display first fragment
                        myViewPager.setCurrentItem(0);
    
    }

  • 创建扩展FragmentPagerAdapter(或FragmentStatePagerAdapter)的适配器。看起来是这样的:

    class MyAdapter extends FragmentPagerAdapter {
    private final int[] titles = {R.string.main_activity_title, R.string.join_activity_title};
    private final String[] fragments = {
        MainFragment.class.getName(),
        JoinFragment.class.getName()
        };
    private final Context ctx;
    
    public MyAdapter(FragmentManager fm, Context ctx) {
        super(fm);
        this.ctx = ctx;
        }
    
    @Override
    public CharSequence getPageTitle(int position) {
        return ctx.getString(titles[position]);
        }
    
    @Override
    public Fragment getItem(int position) {
        return Fragment.instantiate(ctx, fragments[position]);
        }
    
    @Override
    public int getCount() {
        return titles.length;
        }
    }
    
  • (可选)查看每页顶部的标题内容,您可以单击这些内容以便快速前进到另一页?它们被称为tabhosts

  • 要使用它们,只需在MainActivity布局中添加一个tabhost,并在MainActivity.java中添加以下逻辑:

        myViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                // when user do a swipe the selected tab change
                myTabHost.setSelectedNavigationItem(position);
            }
        });
    
        //set titles
        for (int i = 0; i < myAdapter.getCount(); i++) {
            myTabHost.addTab(
                    myTabHost.newTab()
                            .setText(myAdapter.getPageTitle(i))
                            .setTabListener(this)
            );
        }
    
    您还可以根据自己的意愿进行定制


    我很抱歉,如果有打字错误和其他东西。但这应该能满足你大部分的需要。

    我已经试过了。但有一些问题,这就是为什么我需要这样做…如果我扩展了片段,那么一些方法不支持..顺便说一句,你能给我一些例子吗?哪些方法不支持?检查这个链接@Jignesh Jain,我正在跟踪这个..但我不知道为什么我的滑动不起作用
    class MyAdapter extends FragmentPagerAdapter {
    private final int[] titles = {R.string.main_activity_title, R.string.join_activity_title};
    private final String[] fragments = {
        MainFragment.class.getName(),
        JoinFragment.class.getName()
        };
    private final Context ctx;
    
    public MyAdapter(FragmentManager fm, Context ctx) {
        super(fm);
        this.ctx = ctx;
        }
    
    @Override
    public CharSequence getPageTitle(int position) {
        return ctx.getString(titles[position]);
        }
    
    @Override
    public Fragment getItem(int position) {
        return Fragment.instantiate(ctx, fragments[position]);
        }
    
    @Override
    public int getCount() {
        return titles.length;
        }
    }
    
        myViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                // when user do a swipe the selected tab change
                myTabHost.setSelectedNavigationItem(position);
            }
        });
    
        //set titles
        for (int i = 0; i < myAdapter.getCount(); i++) {
            myTabHost.addTab(
                    myTabHost.newTab()
                            .setText(myAdapter.getPageTitle(i))
                            .setTabListener(this)
            );
        }
    
        myViewPager.setPageTransformer(true, new DefaultTransformer());