2

Im использует ActionBar, который загружает различные фрагменты. Это делается в классе FragmentActivity. Один из Fragent должен иметь ViewPager, содержащий разные фрагменты. Теперь я не получаю никаких ошибок, но ViewPager и PagerTitleStrip и все Фрагенты внутри ViewPager вообще не отображаются. Остальные фрагменты из ActionBar работают правильно. Im использует все классы из пакета поддержки. Я читал много сообщений здесь, но я еще не смог его узнать.ViewPager во внутреннем фрагменте, не отображается, не отображается

В моем ActivityClass полученного из FragmentAcivity, я использую Слушатель:

SettingsActiviy.java

protected class SettingsTabsListener implements ActionBar.TabListener { 

    private Fragment fragment; 

    public SettingsTabsListener(Fragment fragment) { 
     this.fragment = fragment; 
     Log.e("SettingsTabListener","Contructor Fragment is " + fragment); 
    } 

    @Override 
    public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) { 
    } 

    @Override 
    public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) { 
     FragmentManager fragMgr = getSupportFragmentManager(); 
     FragmentTransaction xaction=fragMgr.beginTransaction(); 

     // Dont know if we really need that... 
     if (fragment instanceof SettingsActivityOverviewFragment) { 
      if (fragment == null) { 
       fragment = SettingsActivityOverviewFragment.newInstance(appWidgetId); 
      } 
     } 
     xaction.replace(R.id.FragmentPlaceholder, (Fragment)fragment); 
     xaction.commit(); 
    } 

    @Override 
    public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) { 
     FragmentManager fragMgr = getSupportFragmentManager(); 
     FragmentTransaction xaction=fragMgr.beginTransaction(); 

     xaction.remove(fragment); 
     xaction.commit(); 
    } 

SettingsActivityOverviewFragment.java

public class SettingsActivityOverviewFragment extends Fragment { 
private static final Field sChildFragmentManagerField; 
ViewPager viewPager; 
PagerAdapter pagerAdapter; 

public static final SettingsActivityOverviewFragment newInstance(int appWidgetId){ 
    SettingsActivityOverviewFragment f = new SettingsActivityOverviewFragment(); 
    Bundle bdl = new Bundle(1); 
    bdl.putInt("appWidgetId", appWidgetId); 
    f.setArguments(bdl); 
    return f; 
} 

/* это исправление вызвано Googles NullPointer , до снятия-метода */

static { 
    Field f = null; 
    try { 
     f = Fragment.class.getDeclaredField("mChildFragmentManager"); 
     f.setAccessible(true); 
    } catch (NoSuchFieldException e) { 
    } 
    sChildFragmentManagerField = f; 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 

    if (sChildFragmentManagerField != null) { 
     try { 
      sChildFragmentManagerField.set(this, null); 
     } catch (Exception e) { 
     } 
    } 
} 

/* конец исправления */

@Override 
    public View onCreateView(LayoutInflater inflater, 
          ViewGroup container, 
          Bundle savedInstanceState) { 
    View result=inflater.inflate(R.layout.settings_frag_overview, container, false); 
    viewPager=(ViewPager)result.findViewById(R.id.overview_pager); 
    Log.e("SettingsActivityOverviewFragment","viewPager content is " + viewPager + ", " + viewPager.getHeight()); 

    pagerAdapter = buildAdapter(); 
    new SetAdapterTask().execute(); 

    return(result); 
    } 

    private PagerAdapter buildAdapter() { 
    return(new SettingsOverviewPagerAdapter(getActivity(), getChildFragmentManager())); 
    } 

    public void onActivityResult(int requestCode, int resultCode, android.content.Intent data) { 

    } 

    private class SetAdapterTask extends AsyncTask<Void, Void, Void> { 
     protected Void doInBackground(Void... params) { 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 

      if(pagerAdapter != null) viewPager.setAdapter(pagerAdapter); 
     } 
    } 

} 

SettingsOverviewPagerAdapter.java

public class SettingsOverviewPagerAdapter extends FragmentPagerAdapter { 
Context ctxt=null; 

    public SettingsOverviewPagerAdapter(Context ctxt, FragmentManager mgr) { 
    super(mgr); 
    this.ctxt=ctxt; 
    } 

    @Override 
    public int getCount() { 
     Log.i("SettingsOverviewPagerAdapter","getCount returns 10"); 
    return(10); 
    } 

    @Override 
    public Fragment getItem(int position) { 
    return(EditorFragment.newInstance(position)); 
    } 

    @Override 
    public String getPageTitle(int position) { 
    return(EditorFragment.getTitle(ctxt, position)); 
    } 
} 

EditorFragment.java

public class EditorFragment extends Fragment { 
private static final String KEY_POSITION = "position"; 

static EditorFragment newInstance(int position) { 
    EditorFragment frag = new EditorFragment(); 
    Bundle args = new Bundle(); 

    args.putInt(KEY_POSITION, position); 
    frag.setArguments(args); 

    return (frag); 
} 

static String getTitle(Context ctxt, int position) { 
    return (String.format("ctest", position + 1)); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View result = inflater.inflate(R.layout.editor, container, false); 
    EditText editor = (EditText) result.findViewById(R.id.editor); 
    int position = getArguments().getInt(KEY_POSITION, -1); 

    editor.setHint(getTitle(getActivity(), position)); 

    return (result); 
} 
} 

SettingsFragOverview.xml

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/overview_pager" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <android.support.v4.view.PagerTitleStrip 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:background="#33b5e5" 
     android:textColor="#fff"/> 
</android.support.v4.view.ViewPager> 

EditorFragment.xml

<?xml version="1.0" encoding="utf-8"?> 
<EditText xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/editor" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:inputType="textMultiLine" 
    android:gravity="left|top" 
/> 
+0

Является ли ваш просмотрщик завернутым в прокрутку? – Tobrun

+0

не viewpager напрямую обернут в scrollview, но родительский фрагмент обернут внутри scrollview да – user1013443

+0

ohhh ... я увидел, когда я удалил Scrollview ... он появился ... спасибо за этот tipp! – user1013443

ответ

7

Это обычно происходит, когда:

  • Используя внутренний фрагмент в качестве родителя ViewPager
  • родительский контейнер имеет Scrollview в нем.
+0

Вы спасли меня много времени, спасибо – serejja

+0

ScrollView заставил фрагмент не отображаться. Спасибо за ответ. Однако знаете ли вы, почему? – naaz

Смежные вопросы