2016-11-29 6 views
5

Mam 7 kart daty na moim ekranie. Jeśli jednak data przypada na kolejny miesiąc, nie zezwalam użytkownikowi na klikanie tych kart. Chcę, aby były widoczne, ale nie klikalne.Nie zezwalaj użytkownikowi na klikanie jednej z zakładek

This is how the tabs look like

To jest część mojego kodu:

public void setupViewPager(ViewPager viewPager, ArrayList<String> id, ArrayList<String> tasks, 
          ArrayList<Double> mondayHours, ArrayList<Double> tuesdayHours, 
          ArrayList<Double> wednesdayHours, ArrayList<Double> thursdayHours, 
          ArrayList<Double> fridayHours, ArrayList<Double> saturdayHours, 
          ArrayList<Double> sundayHours) { 
    Bundle bundle = new Bundle(); 
    bundle.putStringArrayList(EXTRA_CHECKED_TASK_ID, id); 
    bundle.putStringArrayList(EXTRA_CHECKED_TASKS, tasks); 
    bundle.putSerializable(EXTRA_MONDAY, mondayHours); 
    bundle.putSerializable(EXTRA_TUESDAY, tuesdayHours); 
    bundle.putSerializable(EXTRA_WEDNESDAY, wednesdayHours); 
    bundle.putSerializable(EXTRA_THURSDAY, thursdayHours); 
    bundle.putSerializable(EXTRA_FRIDAY, fridayHours); 
    bundle.putSerializable(EXTRA_SATURDAY, saturdayHours); 
    bundle.putSerializable(EXTRA_SUNDAY, sundayHours); 

    final String MON = "MON" + "\n" + MainActivity.sevenDatesList.get(0); 
    final String TUE = "TUE" + "\n" + MainActivity.sevenDatesList.get(1); 
    final String WED = "WED" + "\n" + MainActivity.sevenDatesList.get(2); 
    final String THU = "THU" + "\n" + MainActivity.sevenDatesList.get(3); 
    final String FRI = "FRI" + "\n" + MainActivity.sevenDatesList.get(4); 
    final String SAT = "SAT" + "\n" + MainActivity.sevenDatesList.get(5); 
    final String SUN = "SUN" + "\n" + MainActivity.sevenDatesList.get(6); 

    adapter = new ViewPagerAdapter(getSupportFragmentManager(), bundle); 
    adapter.addFragment(new MondayFragment(), MON); 
    adapter.addFragment(new TuesdayFragment(), TUE); 
    adapter.addFragment(new WednesdayFragment(), WED); 
    adapter.addFragment(new ThursdayFragment(), THU); 
    adapter.addFragment(new FridayFragment(), FRI); 
    adapter.addFragment(new SaturdayFragment(), SAT); 
    adapter.addFragment(new SundayFragment(), SUN); 

    viewPager.setAdapter(adapter); 
} 

To jest mój kod XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 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:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.ada.foresight.TimesheetActivity"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingTop="8dp" 
     android:paddingBottom="8dp" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin"> 

     <TextView 
      android:id="@+id/lblWeekMsg" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/week" 
      android:textAppearance="?attr/textAppearanceListItem" /> 
     <TextView 
      android:id="@+id/lblWeekNo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_toEndOf="@id/lblWeekMsg" 
      android:layout_alignBaseline="@id/lblWeekMsg" 
      android:text="" 
      android:textAppearance="?attr/textAppearanceListItem" /> 

    </RelativeLayout> 
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     android:id="@+id/coordinator_layout" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="30"> 

     <android.support.design.widget.AppBarLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

      <android.support.design.widget.TabLayout 
       android:id="@+id/tab_layout" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       app:tabTextColor="@android:color/white" 
       app:tabMode="scrollable" 
       app:tabGravity="fill" /> 

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

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

    </android.support.design.widget.CoordinatorLayout> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin"> 

    </RelativeLayout> 
</LinearLayout> 

badałem na podobny problem, ale stosując inne podejście do tworzenia zakładek a niektóre nie rozumiem. Research 1

Odpowiedz

1

to, co robię, kiedy włączyć lub wyłączyć zakładkę lub dostosowywać kartę.

//get tab view 
ViewGroup vg = (ViewGroup) tab_event.getChildAt(0); 
//get number of tab 
int tabsCount = vg.getChildCount(); 
//loop the tab 
for (int j = 0; j < tabsCount; j++) { 
    //get view of selected tab 
    ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); 

    if(j==DESIRED_POSITION){ 
     //disable the selected tab 
     vgTab.setEnable(false); 
    }  
} 

Jeśli dołączasz do widoku, musisz wyłączyć przesuwanie palcem w przeglądarce ekranów. Jeśli nie, nadal możesz przesuwać palcem do karty wyłączania.

+0

to tab_event a tabLayout? –

+0

yes.its Tablayout. 'protected TabLayout tab_event = (TabLayout) findViewById (R.id.tabs)'; – ZeroOne

+0

Dziękujemy! Twoje rozwiązanie działa! –

2

można rozszerzyć TabLayout klasę i zastąpić

void selectTab(final Tab tab, boolean updateIndicator) 

metody tak:

@Override 
void selectTab(final Tab tab, boolean updateIndicator){ 
    if (tab.getPosition() == <selectable_position>){ 
     super.selectTab(tab, updateIndicator) 
    } 
} 

Jednakże, należy pamiętać, że logika ta będzie również wyłączyć przesuwając do tej karty poprzez ViewPager.

Aby uzyskać więcej informacji, patrz source.

Powiązane problemy