Справка по настройке оператора if / SectionPageAdapter с отображением информации - PullRequest
0 голосов
/ 09 мая 2018

Хорошо, поэтому в части программы, которую я создаю, есть Activity, которая получает и отображает ListFragments в ListView. В этом действии также есть ViewPager (который позволяет осуществлять смахивание), который переопределяет метод getItem для SectionPageAdapter, чтобы возвращать различные фрагменты, которые в конечном итоге образуют 5 различных смахиваемых разделов в действии.

Я относительно новичок в программировании в целом, и я пытаюсь придумать дизайн, который состоит только из 1 занятия и 2 фрагментов (возможно, 3).

переопределение getItem возвращает фрагмент и то, что отображается на каждой из 5 вкладок. Два фрагмента будут использовать макет этого действия, и я хотел бы каким-то образом сделать условное заявление, которое расшифрует, какой из них подходит в какой ситуации.

Вот мой код:

import android.graphics.Color;
import android.support.design.widget.TabLayout;
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.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;
import android.view.Menu;

public class SchResRanActivity extends AppCompatActivity {
public boolean isRanking;
public int daysPassed;

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

    //Toolbar schResRanBar = findViewById(R.id.theTopBar);
    //setSupportActionBar(schResRanBar);

    SectionPagerAdapter sectionPagerAdapter =
            new SectionPagerAdapter(getSupportFragmentManager());

    ViewPager pager = findViewById(R.id.pager);
    pager.setAdapter(sectionPagerAdapter);

    TabLayout tabLayout = findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(pager);
    //tabLayout.setSelectedTabIndicatorColor(Color.WHITE);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_schresran_bar, menu);

    return super.onCreateOptionsMenu(menu);
}

void setPageTitle(){}

private class SectionPagerAdapter extends FragmentPagerAdapter {

    private SectionPagerAdapter(FragmentManager fm) { super(fm); }

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

@Override
public CharSequence getPageTitle(int position) {
    switch(position){
        case 0:
            return getResources().getString(R.string.day1);
        case 1:
            return getResources().getString(R.string.day2);
        case 2:
            return getResources().getString(R.string.day3);
        case 3:
            return getResources().getString(R.string.day4);
        case 4:
            return getResources().getString(R.string.day5);
        case 5:
            return getResources().getString(R.string.dayPlayoffs);
    }
    return null;
}
//this code depicts what I am trying to do but is way to clunky!
@Override
    public Fragment getItem(int position) {
       if (isRanking) {
        switch (position){
                case 0:
                     if (daysPassed >= 1) {
                    return new RankingsFragment();
                      } else {
                    return new NAFragment();
                case 1:
                       if (daysPassed >= 2) {
                    return new RankingsFragment();
                      } else {
                    return new NAFragment();
                case 2:
                     if (daysPassed >= 3) {
                    return new RankingsFragment();
                      } else {
                    return new NAFragment();                    case 3:
                case 4:
                     if (daysPassed >= 4) {
                    return new RankingsFragment();
                      } else {
                    return new NAFragment();
                case 5:
                     if (daysPassed >= 5) {
                    return new RankingsFragment();
                      } else {
                    return new NAFragment(); 
                    } 
                  return null;

             if (isRanking == false) {
             case 0:
                     if (daysPassed >= 1) {
                    return new ScheduleFragment();
                      } else {
                    return new NAFragment();
                case 1:
                       if (daysPassed >= 2) {
                    return new ScheduleFragment();
                      } else {
                    return new NAFragment();
                case 2:
                     if (daysPassed >= 3) {
                    return new ScheduleFragment();
                      } else {
                    return new NAFragment();                    case 3:
                case 4:
                     if (daysPassed >= 4) {
                    return new ScheduleFragment();
                      } else {
                    return new NAFragment();
                case 5:
                     if (daysPassed >= 5) {
                    return new ScheduleFragment();
                      } else {
                    return new NAFragment(); 
                    } 
        return null;
    }
    }
    }

Этот код отображает то, что я пытаюсь сделать, но это очень неудобно! Может кто-нибудь предложить более эффективный способ написать это?

Предположим, что есть кнопка под названием «Рейтинги» и кнопка «Расписание». onClick обеих этих кнопок приводит вас к активности SchResRan, но если нажать кнопку расписания, переменная isRanking == false и каждый день появляется другая информация. таким образом, если пройденные дни == 0, никакая информация не отображается ни на одной странице (все страницы будут фрагментами NA), но если пройденные дни == 1, на странице дня 1 будет отображаться информация дня 1, если пройденные дни == 2 дня 1 и дня 2 страница будет отображать соответствующую информацию, и так далее, то же самое для страниц рейтинга.

1 Ответ

0 голосов
/ 09 мая 2018

вы можете создать метод для этого

  public Fragment getItem(int position) {

       tempPosition=position+1;
      if (dayspassed>= tempPosition) 
          {
          if (isRanking) 
          {
          return new RankingsFragment();
          }else
          {
          return new ScheduleFragment();
          }
       } else 
       {
        return new NAFragment();
       }
     }
   }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...