[英]Android Fragment not showing inside Viewpager
I have an android application using swipe tabs to navigate between fragments. 我有一个使用滑动选项卡在片段之间导航的android应用程序。 I have 2 fragments defined in xml file and 1 main activity.
我在xml文件中定义了2个片段,并进行了1个主要活动。 Whenever I run my application I'm getting the tabs to show up properly with the correct names "Administration", "Scan", "About"... but the page is blank.
每当我运行我的应用程序时,我都会使用正确的名称“管理”,“扫描”,“关于” ...来正确显示选项卡,但是页面为空白。 When I step through my debugger to check the return value of onCreateView (in my FragmentPagerAdapter code below) it appears to be returning correct value... I can't figure out why I keep getting a blank screen.
当我逐步通过调试器检查onCreateView的返回值(在下面的FragmentPagerAdapter代码中)时,似乎返回的是正确的值...我不知道为什么我总是得到空白屏幕。 Can someone please help?
有人可以帮忙吗?
Here is my activity_main.xml
这是我的activity_main.xml
<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.atd.giftmonster.MainActivity" />
Here is my MainActivity.java
这是我的MainActivity.java
public class MainActivity extends ActionBarActivity implements ActionBar.TabListener {
ViewPager mViewPager;
DFragmentManager mFragmentManager;
private static EditText textEmail;
private static EditText textPw;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<String> titles = new ArrayList<String>();
titles.add("administrator");
titles.add("scan");
titles.add("about");
List<Integer> layoutids = new ArrayList<Integer>();
layoutids.add(R.layout.fragment_admin);
layoutids.add(R.layout.fragment_scan);
layoutids.add(R.layout.fragment_scan);
// Set up the action bar.
final ActionBar actionBar = getSupportActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mFragmentManager = new DFragmentManager(getSupportFragmentManager(), layoutids, titles);
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mFragmentManager);
// When swiping between different sections, select the corresponding
// tab. We can also use ActionBar.Tab#select() to do this if we have
// a reference to the Tab.
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionBar.setSelectedNavigationItem(position);
}
});
// For each of the sections in the app, add a tab to the action bar.
for (int i = 0; i < mFragmentManager.getCount(); i++) {
actionBar.addTab(
actionBar.newTab()
.setText(mFragmentManager.getPageTitle(i))
.setTabListener(this));
}
}
Here is my FragmentPagerAdapter w/
static fragment class
这是我的带有静态片段类的
FragmentPagerAdapter
public class DFragmentManager extends FragmentPagerAdapter {
List<String> mTitle;
List<Integer> mLayoutID;
List<Fragment> mFragments;
FragmentManager mFragmentManager;
public DFragmentManager(FragmentManager fm, List<Integer> layoutIDs, List<String> layoutTitles)
{
super(fm);
mFragments = new ArrayList<Fragment>();
mLayoutID = layoutIDs;
mFragmentManager = fm;
mTitle = layoutTitles;
int size = mLayoutID.size();
for (int i = 0; i < size; i++)
{
mFragments.add(DFragment.newInstance(mLayoutID.get(i)));
}
}
@Override
public Fragment getItem(int position)
{
return mFragments.get(position);
}
@Override
public int getCount()
{
return mFragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
//return (CharSequence)new String("ss");
//return (CharSequence) mFragments.get(position).getTitle();
return (CharSequence) mTitle.get(position);
}
public Fragment getFragment(int position)
{
return mFragments.get(position);
}
public static class DFragment extends Fragment
{
private View mView;
private static final String ARG_LAYOUT_ID = "layout_id";
public DFragment()
{
mView = null;
}
public static final DFragment newInstance(int layoutID)
{
DFragment fragment = new DFragment();
Bundle bundle = new Bundle();
bundle.putInt(ARG_LAYOUT_ID, layoutID);
fragment.setArguments(bundle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle bundle)
{
int resourceID = getArguments().getInt(ARG_LAYOUT_ID);
mView = inflater.inflate(resourceID, group, false);
return mView;
}
public View getView()
{
return mView;
}
}
edit: 编辑:
It's been a while since I revised this problem but I fixed it by not passing the R.id.fragmetnid to the fragment in the args. 自修改此问题以来已有一段时间,但我通过不将R.id.fragmetnid传递给args中的片段来解决此问题。 (the List layoutIds variable).
(List layoutIds变量)。 Instead I would pass my own designated id then inflate the fragment within the onCreateView.
相反,我将传递自己的指定ID,然后在onCreateView中填充该片段。 Seems to be working now.
似乎现在正在工作。
Try this version of code in your activity: 在您的活动中尝试以下版本的代码:
public class SampleSwipeActivity extends FragmentActivity implements ActionBar.TabListener {
private ViewPager viewPager;
private ActionBar actionBar;
private TabsPagerAdapter mAdapter;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
setContentView(R.layout.main);
viewPager = (ViewPager) findViewById(R.id.pager);
actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
String [] tabs = new String[]{"Tab1", "Tab2", "Tab3", "Tab4"};
for(String tab : tabs)
{
actionBar.addTab(actionBar.newTab()
.setText(tab)
.setTabListener(this));
}
mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(mAdapter);
}
@Override
public void onTabSelected(ActionBar.Tab tab, FragmentTransaction ft)
{
viewPager.setCurrentItem(tab.getPosition());
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener()
{
@Override
public void onPageSelected(int position)
{
actionBar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2)
{
}
@Override
public void onPageScrollStateChanged(int arg0)
{
}
});
}
@Override
public void onTabUnselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabReselected(ActionBar.Tab tab, FragmentTransaction ft) {
}
}
Since you are using Fragments, I would use FragmentActivity instead of ActionBarActivity. 由于您使用的是片段,因此我将使用FragmentActivity而不是ActionBarActivity。
I hope this helps. 我希望这有帮助。
On your code, you can change 在您的代码上,您可以更改
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.pager);
with this 有了这个
// Set up the ViewPager with the sections adapter.
mViewPager = (android.support.v4.view.ViewPager) findViewById(R.id.pager);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.