1

Ich möchte die Swipe-Funktion in der Aktivität mit Registerkarten deaktivieren. Ich habe einige Beispiele ausprobiert, die ich gefunden habe, aber es hat nicht funktioniert oder der Code war komplett anders. Hier ist mein Code:Deaktivieren Swipe in Aktivität mit Registerkarten (Android Studio)

MainActivity.java:

package com.example; 

import android.support.design.widget.TabLayout; 
import android.support.design.widget.FloatingActionButton; 
import android.support.design.widget.Snackbar; 
import android.support.v4.app.NotificationCompat; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.Toolbar; 

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.view.ViewGroup; 

import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 


    private SectionsPagerAdapter mSectionsPagerAdapter; 


    private ViewPager mViewPager; 

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

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     // Create the adapter that will return a fragment for each of the three 
     // primary sections of the activity. 
     mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); 

     // Set up the ViewPager with the sections adapter. 
     mViewPager = (ViewPager) findViewById(R.id.container); 
     mViewPager.setAdapter(mSectionsPagerAdapter); 

     TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs); 
     tabLayout.setupWithViewPager(mViewPager); 

     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 

    } 


    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 




    public class SectionsPagerAdapter extends FragmentPagerAdapter { 

     public SectionsPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      // getItem is called to instantiate the fragment for the given page. 
      // Return a PlaceholderFragment (defined as a static inner class below). 

      switch (position) { 
       case 0: 
        return FragmentOne.newInstance("a","b"); 
       case 1: 
        return FragmentTwo.newInstance("a","b"); 
       case 2: 
        return FragmentThree.newInstance("a","b"); 
       case 3: 
        return FragmentFour.newInstance("a","b"); 
       case 4: 
        return FragmentFive.newInstance("a","b"); 
       default: 
        return FragmentThree.newInstance("a","b"); 
      } 

     } 

     @Override 
     public int getCount() { 
      return 5; 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      switch (position) { 
       case 0: 
        return "One"; 
       case 1: 
        return "Two"; 
       case 2: 
        return "Three"; 
       case 3: 
        return "Four"; 
       case 4: 
        return "Five"; 
      } 
      return null; 
     } 
    } 


    public static class PlaceholderFragment extends Fragment { 

     private static final String ARG_SECTION_NUMBER = "section_number"; 


     public static PlaceholderFragment newInstance(int sectionNumber) { 
      PlaceholderFragment fragment = new PlaceholderFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_SECTION_NUMBER, sectionNumber); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     public PlaceholderFragment() { 
     } 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.fragment_main, container, false); 
      TextView textView = (TextView) rootView.findViewById(R.id.section_label); 
      textView.setText(getString(R.string.section_format, getArguments().getInt(ARG_SECTION_NUMBER))); 
      return rootView; 
     } 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/main_content" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:context="com.example.MainActivity" 
    android:background="#1d2935"> 

    <android.support.design.widget.AppBarLayout 
     android:id="@+id/appbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="@dimen/appbar_padding_top" 
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar 
      android:id="@+id/toolbar" 
      android:layout_width="match_parent" 
      android:layout_height="?attr/actionBarSize" 
      app:layout_scrollFlags="scroll|enterAlways" 
      app:popupTheme="@style/AppTheme.PopupOverlay"> 

     </android.support.v7.widget.Toolbar> 

    </android.support.design.widget.AppBarLayout> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/container" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 

    <android.support.design.widget.TabLayout 
     android:id="@+id/tabs" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom"/> 

    <android.support.design.widget.FloatingActionButton 
     android:id="@+id/fab" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_margin="@dimen/fab_margin" 
     android:src="@mipmap/icon_plus_normal" 
     app:backgroundTint="#1d2935" /> 

</android.support.design.widget.CoordinatorLayout> 
+0

benutzerdefinierte Ansicht Pager erstellen und einige Verfahren ändern [http://www.unknownerror.org/opensource/thebird /Swipe/q/stackoverflow/9650265/how-do-disable-paging-by-swiping-with-finger-in-viewpager-but-still-be-able-to-s](http://www.unknownerror. org/opensource/thebird/Streichen/q/stackoverflow/9650265/how-do-disable-Paging-durch-Swiping-mit-Finger-in-Viewpager-aber-noch-kann-sein- to-s) – Krishna

+1

Danke, es hat funktioniert – Dima

Antwort

1

Sie benötigen diese Art und Weise kundenspezifische ViewPager Klasse zu erstellen.

public class CustomViewPager extends ViewPager { 
private boolean swipeable = false; 

public CustomViewPager(Context context) { 
    super(context); 
} 

public CustomViewPager(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 

// Call this method in your motion events when you want to disable or enable 
// It should work as desired. 
public void setSwipeable(boolean swipeable) { 
    this.swipeable = swipeable; 
} 

@Override 
public boolean onInterceptTouchEvent(MotionEvent arg0) { 
    return (this.swipeable) ? super.onInterceptTouchEvent(arg0) : false; 
} 

Jetzt

CustomViewPager ViewPagerObj = (CustomViewPager)findViewById(R.id.container); 
    ViewPagerObj.setSwipeable(false); 

Sie sollten dies in Ihrem XML hinzufügen

<Your_packagename.CustomViewPager 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" /> 
+1

Danke, es hat funktioniert. – Dima

+0

@Dima Froh, das zu empfangen. Glückliche Kodierung –