Итак, чтобы начать с того, что я ущипнул код от here, я установил названия страниц, чтобы отобразить дату, которая хорошо работает, но у меня возникают проблемы с позициями и то, что Date на самом деле отправляется в Bundle, начинается с сегодняшней даты, а позиция - 2000,«бесконечный» прокручиваемый viewpager с добавлением дней/декрементом
Я прокрутил вправо, а положение и дата переместились в 2002 году и через 2 дня после сегодняшнего дня, но PagerTitleStrip будет правильным и сказать его завтра.
То же самое происходит, если я прокручу влево, кроме его декрементированного.
Итак, мой вопрос: «Вы знаете, почему это странное поведение происходит и как я могу это исправить?»
Итак, вот код, я делаю что-то неправильно?
Кроме того, когда приложение загружает на экран ViewPager, то PagerTitleStrip будет выглядеть следующим образом (я думаю, что это то, что вызывает проблемы)
[вчера дата] [сегодняшняя дата] [завтрашняя дату]
public class MainMenuActivity extends AppCompatActivity {
/**
* The {@link android.support.v4.view.PagerAdapter} that will provide
* fragments for each of the sections. We use a
* {@link FragmentPagerAdapter} derivative, which will keep every
* loaded fragment in memory. If this becomes too memory intensive, it
* may be best to switch to a
* {@link android.support.v4.app.FragmentStatePagerAdapter}.
*/
BootstrapPagerAdapter mSectionsPagerAdapter;
/**
* The {@link ViewPager} that will host the section contents.
*/
ViewPager mViewPager;
ArrayList<Set> selected = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu_setup);
try {
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setLogo(R.mipmap.ic_launcher);
getSupportActionBar().setDisplayUseLogoEnabled(true);
getSupportActionBar().setTitle("ProjectME");
} catch(NullPointerException n) {
Log.v("nullPointerCaught", n.toString());
}
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new BootstrapPagerAdapter(getResources(), getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mSectionsPagerAdapter);
mViewPager.setCurrentItem(2000);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
if(id == R.id.action_add) {
Intent intent = new Intent(MainMenuActivity.this, CategoryListView.class);
startActivity(intent);
}
if(id == R.id.action_cal) {
Intent intent = new Intent(MainMenuActivity.this, CalendarView.class);
startActivity(intent);
}
if(id == R.id.action_copy) {
Toast.makeText(getApplicationContext(), "Copy has been clicked", Toast.LENGTH_SHORT).show();
}
return super.onOptionsItemSelected(item);
}
public ArrayList<Set> getSelected() {
return selected;
}
public void setSelected(ArrayList<Set> selected) {
this.selected = selected;
}
public class BootstrapPagerAdapter extends FragmentPagerAdapter {
/**
* Create pager adapter
*
* @param resources
* @param fragmentManager
*/
public BootstrapPagerAdapter(Resources resources, FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return 10000;
}
@Override
public int getItemPosition(Object object) {
return super.getItemPosition(object);
}
@Override
public CharSequence getPageTitle(int position) {
DateTime pagerdate = DateTime.now(TimeZone.getDefault());
DateTime days = pagerdate.plusDays(position - 2000);
return days.format("DD/MM/YYYY").toString();
}
@Override
public Fragment getItem(int position) {
DateTime pagerdate = DateTime.now(TimeZone.getDefault());
DateTime days = pagerdate.plusDays(position - 2000);
Bundle bundle = new Bundle();
bundle.putString("date", days.format("DD/MM/YYYY").toString());
bundle.putInt("position", position);
Log.v("date", days.format("DD/MM/YYYY").toString());
Log.v("position", position + "");
MainMenuView2 mainMenuView2 = new MainMenuView2();
mainMenuView2.setArguments(bundle);
return mainMenuView2;
}
}
}
начать, для «бесконечных» вещей, которые вы должны использовать 'FragmentStatePagerAdapter' вместо' FragmentPagerAdapter' – injecteer
только что добавил «FragmentStatePagerAdapter», я просмотрю документацию разработчика и посмотрю, что я могу найти – Joeliomason
Я не понимаю, что вы имеете в виду под «странным поведением» – injecteer