getitem() не возвращает вызываемый фрагмент в моем ViewPager

Я добавил 8 фрагментов в свой адаптер ViewPagerAdapter в ArrayList, используя класс MainActivity. Вот мой код:

ViewPagerAdapter.java

public class ViewPagerAdapter extends FragmentPagerAdapter {

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public ViewPagerAdapter(FragmentManager fm, List<Fragment> mFragmentList) {
    super(fm);
    this.mFragmentList =mFragmentList ;
}

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

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

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

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

MainActivity.java

public class MainActivity extends AppCompatActivity {

private Toolbar toolBar;
private TabLayout tabLayout;
private ViewPager viewPager;
public static final String MYTAG = "mytag";
private int[] tabIcons = {R.drawable.parkingicon, R.drawable.childrenparkicon, R.drawable.cafeteriaicon,
        R.drawable.teaicon, R.drawable.stationaryicon, R.drawable.securityicons, R.drawable.tumtumicon,
        R.drawable.wastebinicon};

static final LatLng ZOOM = new LatLng(19.129, 72.915);
public static GoogleMap googleMap;
private static Context mContext;
//Context context= getApplicationContext();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mContext = getApplicationContext();

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

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

    //TabLAyout Initialisation
    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    Log.d("Tag", "i am before iconing");
    setupTabIcons();
    Log.d("Tag", "i am after iconing");

    try {
        if (googleMap == null) {
            googleMap = ((MapFragment) getFragmentManager().
                    findFragmentById(R.id.map)).getMap();
        }
        googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
        googleMap.setMyLocationEnabled(true);
        googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(ZOOM, 15));
        Marker marker = googleMap.addMarker(new MarkerOptions().position(ZOOM).title("MYCheck Marker"));
    } catch (Exception e) {
        e.printStackTrace();
    }
    Log.d("Tag", "i am after google map calling");
}

private void setupTabIcons() {
    for (int i = 0; i < 8; i++) {
        Log.d("Tag", "i called tab at "+i);
        tabLayout.getTabAt(i).setIcon(tabIcons[i]);
    }
}

private void setupViewPager(ViewPager viewPager) {
    Log.d("Tag", "i am  goring to call ViewpagerAdapter");
    //Calling the Adapter Here
    ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
    adapter.addFragment(new Parking(), "Parkings");
    adapter.addFragment(new ChildrenPark(), "Children Parks");
    adapter.addFragment(new Cafeteria(), "Cafeteria");
    adapter.addFragment(new Canteens(), "Canteens");
    adapter.addFragment(new Stationary(), "Stationery");
    adapter.addFragment(new SecurityCheck(), "Security");
    adapter.addFragment(new TumTum(), "Tum Tum");
    adapter.addFragment(new WasteBins(), "WasteBins");
    viewPager.setAdapter(adapter);
    Log.d("Tag", "i had set the Adapter for you and now moving out after adding all adapters. END");
}

public Context getContext(){
    return mContext;
}

}

Итак, я хочу щелкнуть вкладку и добавить соответствующий фрагмент в Viewpager. Но всякий раз, когда я нажимаю первую вкладку в позиции 0, она загружает фрагмент в позиции 1. Я не могу понять, почему мой getitem() метод адаптера не работает должным образом. Пожалуйста помоги. заранее спасибо.


person vivek    schedule 15.01.2016    source источник


Ответы (1)


измените getItem() на значение ниже, увеличьте position на единицу.

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

и измените настройки setupTabIcons на tabIcons.length

 private void setupTabIcons() {
        for (int i = 0; i > tabIcons.length; i++) {
            Log.d("Tag", "i called tab at "+i);
            tabLayout.getTabAt(i).setIcon(tabIcons[i]);
        }
    }

Я проверил ваш код, он должен работать для вас.

person Shishram    schedule 15.01.2016
comment
Я понимаю, что +1 или -1 могут творить чудеса, но это не так. Когда бы ни загружалось приложение, оно загружает фрагмент позиции 1, а не 0, и, с другой стороны, когда я нажимаю последнюю вкладку, чтобы загрузить последний фрагмент, оно ничего не загружает. В любом случае, спасибо за ответ. - person vivek; 15.01.2016
comment
еще одна проблема в вашем setupTabIcons делает размер до 7, так как у вас есть только 8 фрагментов - person Shishram; 15.01.2016
comment
@shisharam у меня есть 7 фрагментов, и поэтому я запустил цикл for от 0 до 8, он дает мне правильные результаты, и если я дойду до 7, значок последней вкладки не появится. Любое другое решение, пожалуйста? - person vivek; 18.01.2016
comment
Вы пробовали, как указано выше? Я отредактировал ответ. @vivek - person Shishram; 18.01.2016
comment
попробуйте обновить оба метода и проверить. - person Shishram; 18.01.2016
comment
Для кода фрагмента, если я доберусь до position+1, он загрузит 3-й фрагмент, а для кода for loop, если я доберусь до i › 7 он перейдет в бесконечный цикл и, следовательно, не установит никаких значков... Обе эти вещи происходят, как и ожидалось. вы можете увидеть мой необработанный код здесь - person vivek; 18.01.2016
comment
Для кода фрагмента, если я доберусь до position+1, он загрузит 3-й фрагмент, а для кода for loop, если я доберусь до i › 7 он перейдет в бесконечный цикл и, следовательно, не установит никаких значков... Обе эти вещи происходят, как и ожидалось. вы можете увидеть мой необработанный код здесь: [ссылка]drive.google. com/file/d/0BxvAsvUuvW6daU9sMVY0djA4LXc/ - person vivek; 18.01.2016
comment
Давайте продолжим обсуждение в чате. - person Shishram; 18.01.2016
comment
@vivek Я отредактировал ответ, проверьте сейчас. надеюсь, это поможет вам сейчас. - person Shishram; 18.01.2016
comment
Вы нашли какое-либо решение проблемы, которая происходит...? - person vivek; 19.01.2016