好的,所以在我构建的程序的一部分中,有一个Activity接收并在ListView中显示ListFragments。此活动还有一个ViewPager(允许滑动)覆盖SectionPageAdapter的getItem方法,以便返回最终组成活动中5个不同可滑动部分的不同片段。
我对一般的编程比较陌生,我试图想一个只包含1个Activity和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;
}
}
}
此代码描述了我想要做的事情,但却是笨重的方式!有人可以提出一种更有效的方式来写这个吗?
假设有一个名为Rankings的按钮和一个名为Schedule的按钮。 这两个按钮的onClick都会带您进入SchResRan活动,但如果按下schedule按钮,则变量isRanking == false,并且每天都会显示不同的信息。所以如果过了几天== 0没有信息显示在任何页面上(所有页面都是NA片段)但是如果过了几天== 1那么第1天的页面将显示第1天的信息,如果过了几天== 2那天1和第2天页面将显示相应的信息,等等排名页面。
答案 0 :(得分:0)
你可以为那个
创建方法 public Fragment getItem(int position) {
tempPosition=position+1;
if (dayspassed>= tempPosition)
{
if (isRanking)
{
return new RankingsFragment();
}else
{
return new ScheduleFragment();
}
} else
{
return new NAFragment();
}
}
}