【问题标题】:How to open another tab (fragment) if today a specific day?如果今天是特定的一天,如何打开另一个标签(片段)?
【发布时间】:2016-09-07 07:49:43
【问题描述】:

我正在开发一个带有片段选项卡的应用程序,并且我想在活动启动时打开另一个选项卡。如果今天是星期一 - 打开第一个标签,如果今天是星期二打开第二个标签等等。我该怎么做?

我的 fragmentactivity.java:

public class FragmentActivity extends AppCompatActivity {

    private Toolbar toolbar;
    private TabLayout tabLayout;
    private ViewPager viewPager;
    SharedPreferences sp;

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

        sp = PreferenceManager.getDefaultSharedPreferences(this);
        String select_class = sp.getString("select_class", "");

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        viewPager = (ViewPager) findViewById(R.id.viewpager);
        setupViewPager(viewPager);

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

    private void setupViewPager(ViewPager viewPager) {
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(new MondayFragment(), "ПН");
        adapter.addFragment(new TuesdayFragment(), "ВТ");
        adapter.addFragment(new WednesdayFragment(), "СР");
        adapter.addFragment(new ThursdayFragment(), "ЧТ");
        adapter.addFragment(new FridayFragment(), "ПТ");
        viewPager.setAdapter(adapter);
    }

    class ViewPagerAdapter extends FragmentPagerAdapter {
        private final List<Fragment> mFragmentList = new ArrayList<>();
        private final List<String> mFragmentTitleList = new ArrayList<>();

        public ViewPagerAdapter(FragmentManager manager) {
            super(manager);
        }

        @Override
        public Fragment getItem(int position) {
            return mFragmentList.get(position);
        }

        @Override
        public int getCount() {
            return mFragmentList.size();
        }

        public void addFragment(Fragment fragment, String title) {
            mFragmentList.add(fragment);
            mFragmentTitleList.add(title);
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mFragmentTitleList.get(position);
        }
    }
}

【问题讨论】:

  • 我已经发布了答案试试并更新我
  • @VishalThakkar 好的

标签: android android-fragments android-tabs dayofweek


【解决方案1】:

首先,使用日历获取星期几:

Calendar c = Calendar.getInstance();
int date = c.get(Calendar.DAY_OF_WEEK);

现在,要确定要打开哪个选项卡,最简单的方法是使用开关。您可以说case Calendar.SUNDAY:case 1:。它们都相同,但Calendar.SUNDAY 更容易,因为您不需要知道天数

switch(date){

case Calendar.SUNDAY:
    //create tab
    break;

case Calendar.MONDAY:
    //create tab
    break;
and so on...

}

这是获取日期并根据输入创建选项卡的简单方法。调用此代码的最佳方法是在应用打开时调用它,如果您只希望它调用一次,则应检查它之前是否已调用过。为此,请保存检查您之前是否打开过“今日标签”的值。

检查您之前是否打开过标签

在撰写此答案时,有 4 种不同的选项可用于保存值:

Internal/external

SQLite

Shared preferences

天数:

从日历类复制。无需将这些行添加到您的项目中:

/**
* Value of the {@code DAY_OF_WEEK} field indicating Sunday.
*/
public static final int SUNDAY = 1;



/**
 * Value of the {@code DAY_OF_WEEK} field indicating Monday.
 */
public static final int MONDAY = 2;

/**
 * Value of the {@code DAY_OF_WEEK} field indicating Tuesday.
 */
public static final int TUESDAY = 3;

/**
 * Value of the {@code DAY_OF_WEEK} field indicating Wednesday.
 */
public static final int WEDNESDAY = 4;

/**
 * Value of the {@code DAY_OF_WEEK} field indicating Thursday.
 */
public static final int THURSDAY = 5;

/**
 * Value of the {@code DAY_OF_WEEK} field indicating Friday.
 */
public static final int FRIDAY = 6;

/**
 * Value of the {@code DAY_OF_WEEK} field indicating Saturday.
 */
public static final int SATURDAY = 7;

【讨论】:

    【解决方案2】:

    试试viewpager.setCurrentItem(index)

    【讨论】:

    • 它将在活动开始时打开您想要的选项卡,索引 = 0 表示 MondayFragment() 等。
    【解决方案3】:

    要查找一周中的当前日期并相应地选择特定选项卡:

    Calendar calendar = Calendar.getInstance();
    int day = calendar.get(Calendar.DAY_OF_WEEK); 
    
    switch (day) {
        case Calendar.SUNDAY:
            viewPager.setCurrentItem(0);
    
        case Calendar.MONDAY:
            viewPager.setCurrentItem(1);
    
        case Calendar.TUESDAY:
            viewPager.setCurrentItem(2);
            ...
            ... //etc
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-28
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多