从未调用FragmentPagerAdapter GetItem?

时间:2014-11-10 12:33:50

标签: android android-viewpager android-adapter android-tabs

我尝试启动一个简单的标签滑动,但是当我添加PagerAdapter时,从不调用getItem方法。 我找不到原因。

活动:

public class ProfileActivity extends Activity implements ActionBar.TabListener
{
    ViewPager viewPager;
    ActionBar actionBar;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_profile_acivity);

    viewPager = (ViewPager) findViewById(R.id.profile_view_pager);
    ProfilePagerAdapter viewPagerAdapter = new ProfilePagerAdapter(getFragmentManager());

    viewPager.setAdapter(viewPagerAdapter);
    viewPager.setCurrentItem(0);

    actionBar = getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

    ActionBar.Tab friendsTab = actionBar.newTab();
    ActionBar.Tab postsTab   = actionBar.newTab();
    ActionBar.Tab tribesTab  = actionBar.newTab();

    tribesTab.setText("TRIBES");
    postsTab.setText("POSTS");
    friendsTab.setText("FRIENDS");

    tribesTab.setTabListener(this);
    postsTab.setTabListener(this);
    friendsTab.setTabListener(this);


    actionBar.addTab(friendsTab);
    actionBar.addTab(postsTab);
    actionBar.addTab(tribesTab);
}


@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_profile_acivity, 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;
    }

    return super.onOptionsItemSelected(item);
}

@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{

}

@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{

}

@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction fragmentTransaction)
{

}
}

(我也试过FragmentActivity虽然我不需要V4而且我使用的是V13)

我的适配器:

private class ProfilePagerAdapter extends FragmentPagerAdapter
{

    Fragment fragment = new ProfileTribeFragment();

    public ProfilePagerAdapter(FragmentManager fm)
    {
        super(fm);
    }

    @Override
    public Fragment getItem(int i)
    {
        Log.i("D","NO :{");
        if(i==0)
        {
            fragment = new ProfileFriendsFragment();
        }
        if(i==1)
        {
            fragment = new ProfilePostsFragment();
        }
        if(i==2)
        {
            fragment = new ProfileTribeFragment();
        }

        return fragment;
    }

    @Override
    public int getCount()
    {
        return 0;
    }
}

所有3个碎片看起来都是这样的:

public class ProfileTribeFragment extends Fragment {


public ProfileTribeFragment() {
    // Required empty public constructor
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    return inflater.inflate(R.layout.fragment_profile_tribe, container, false);
}

}

我无法想象我做错了什么。 从未见过getItem上的Log.i。

4 个答案:

答案 0 :(得分:3)

你在getCount()上返回零,所以你的PagerAdapter中没有任何物品:

@Override
public int getCount()
{
    return 0;
}

答案 1 :(得分:2)

页面适配器不会将页面绑定为 getCount()中定义的页面计数,但在您的情况下,您返回静态'0'零计数,因此寻呼机适配器不会绑定那边的任何页面,你都无法看到任何页面数据。您需要在 getCount()方法中设置无页面计数,例如3,如下所示:

@Override
public int getCount(){
  return 3; // 3 is no of page count
}

答案 2 :(得分:0)

getCount()方法返回片段数:

int fragmentCount=3;

@Override
public int getCount()
{
    return fragmentCount;
}

答案 3 :(得分:0)

对我来说什么都不起作用,然后我找到了解决方案-使用FragmentStatePagerAdapter代替FragmentPagerAdapter。