【问题标题】:getitem() is not returning the called Fragment in my ViewPagergetitem() 没有在我的 ViewPager 中返回被调用的片段
【发布时间】:2016-01-15 11:33:35
【问题描述】:

我使用 MainActivity 类在 ArrayList 中向我的适配器 ViewPagerAdapter 添加了 8 个片段。这是我的代码:

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( ) Adapter 的方法不能正常工作。请帮忙。提前致谢。

【问题讨论】:

    标签: android android-fragments arraylist android-viewpager android-tablayout


    【解决方案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]);
            }
        }
    

    我已经测试了你的代码,它应该适合你。

    【讨论】:

    • 我知道 +1 或 -1 可以创造奇迹,但事实并非如此。无论应用程序加载它加载位置 1 的片段而不是 0 的片段,另一方面,当我单击最后一个选项卡以加载最后一个片段时,它什么也不加载。无论如何,谢谢您的回复。
    • 还有一个问题是您的 setupTabIcons 将大小设置为 7,因为您只有 8 个片段
    • @shisharam 我有 7 个片段,因此我将 for 循环从 0 运行到 8,它给了我正确的结果,如果我达到 7,最后一个标签图标不会出现。请问还有什么解决办法吗?
    • 你试过像上面那样吗?我已经编辑了答案。@vivek
    • 尝试更新您的两种方法并检查。
    猜你喜欢
    • 1970-01-01
    • 2018-07-12
    • 2016-05-19
    • 1970-01-01
    • 2013-10-07
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多