2016-09-07 11 views
-3

フラグメントタブでアプリケーションを開発していて、アクティビティの開始時に別のタブを開きたいとします。今日が月曜日の場合 - 最初のタブを開き、今日の場合は火曜日の2番目のタブなどを開くことができます。 今日は特定の日に別のタブ(断片)を開くには?

マイ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); 
     } 
    } 
} 
+0

私はそれを試してみて、私はOK –

+0

@VishalThakkar –

答えて

3

まず、日を取得カレンダーを使用している週:

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

今、どのタブを開くかを決定するために、スイッチを使って行うのが最も簡単です。 case Calendar.SUNDAY:、またはcase 1:と言うことができます。彼らは両方とも同じですが、あなたは日

switch(date){ 

case Calendar.SUNDAY: 
    //create tab 
    break; 

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

} 

これは、日を取得し、入力に基づいてタブを作成するための簡単な方法であるの番号を知っている必要はありませんので、Calendar.SUNDAYは簡単です。このコードを呼び出す最善の方法は、アプリケーションを開いたときに呼び出すことです。一度だけ呼び出す場合は、前に呼び出したかどうかを確認する必要があります。そのために、前日の「タブ」を開いたかどうかを確認する値を保存します。

Internal/external

SQLite

Shared preferences

:あなたはこの答えを書いているように値を保存するための4つの異なるオプションがあります

前にタブを開いている場合

をチェックします

日番号:

カレンダークラスからコピーされました。プロジェクトにこれらの行を追加する必要がありませ:

/** 
* 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; 
0

は、現在の曜日を確認するにはviewpager.setCurrentItem(index)

+0

を更新答えを掲示していないとそのコードは何を? –

+0

アクティビティが開始されると希望のタブが開き、MondayFragment()などの場合はindex = 0になります。 – linhtruong

0

を試してみて、それに応じて特定のタブを選択します。

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 
} 
関連する問題