ActionBarSherlock, ViewPager, TabsAdapter Fragmentos de tabulación anidados

Implementé un ActionBarSherlock con un ViewPager y un TabsAdapter. Funciona bien, pero ahora he intentado "empujar" desde un Framework Loaded en "Tab 1" otro Fragmento.

El comportamiento debe ser como:

  • Tengo 3 lengüetas en mi aplicación, al lanzar veo la primera lengüeta donde un fragmento con un botón está en él
  • Al presionar el botón de la primera ficha, el fragmento en la primera ficha debe ser reemplazado y otro fragmento debe ser mostrado

Intenté implementar esto, pero tengo un fragmento negro al reemplazar.

El código:

FragmentDemoActivity.java

public class FragmentDemoActivity extends SherlockFragmentActivity { CustomViewPager mViewPager; TabsAdapter mTabsAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ActionBar bar = getSupportActionBar(); bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE); mViewPager = (CustomViewPager)findViewById(R.id.pager); mViewPager.setSwipingEnabled(false); mTabsAdapter = new TabsAdapter(this, bar, mViewPager); mTabsAdapter.addTab(bar.newTab().setText("tab1"), FragmentA.class, null); mTabsAdapter.addTab(bar.newTab().setText("tab2"), FragmentB.class, null); setTitle(R.string.app_name); if (savedInstanceState != null) { bar.setSelectedNavigationItem(savedInstanceState.getInt("tab")); } } @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt("tab", getSupportActionBar().getSelectedNavigationIndex()); } public static class TabsAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener, ActionBar.TabListener { private final Context mContext; private final ActionBar mBar; private final ViewPager mViewPager; private final ArrayList<TabInfo> mTabs = new ArrayList<TabInfo>(); static final class TabInfo { private final Class<?> clss; private final Bundle args; TabInfo(Class<?> _class, Bundle _args) { clss = _class; args = _args; } } public TabsAdapter(FragmentActivity activity, ActionBar bar, ViewPager pager) { super(activity.getSupportFragmentManager()); mContext = activity; mBar = bar; mViewPager = pager; mViewPager.setAdapter(this); mViewPager.setOnPageChangeListener(this); } public void addTab(ActionBar.Tab tab, Class<? extends Fragment> clss, Bundle args) { TabInfo info = new TabInfo(clss, args); tab.setTag(info); tab.setTabListener(this); mTabs.add(info); mBar.addTab(tab); notifyDataSetChanged(); } @Override public int getCount() { return mTabs.size(); } @Override public Fragment getItem(int position) { TabInfo info = mTabs.get(position); return Fragment.instantiate(mContext, info.clss.getName(), info.args); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mBar.setSelectedNavigationItem(position); } @Override public void onPageScrollStateChanged(int state) { } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { Object tag = tab.getTag(); for (int i=0; i<mTabs.size(); i++) { if (mTabs.get(i) == tag) { mViewPager.setCurrentItem(i,false); } } } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { } } } 

FragmentA.java

 public class FragmentA extends Fragment { Button button; int num; @Override public View onCreateView(LayoutInflater inflater, ViewGroup group, Bundle saved) { return inflater.inflate(R.layout.frag_a, group, false); } @Override public void onActivityCreated (Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); num = 0; button = (Button) getActivity().findViewById(R.id.button1); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { FragmentB f1 = new FragmentB(); FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); ft.replace(R.id.pager, f1,"newTag"); ft.show(f1); ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); ft.addToBackStack(null); ft.commit(); } }); } } 

Soy nuevo en Android Development, así que estaría feliz si alguien pudiera ayudarme. Ya he investigado mucho tiempo para buscar una solución, pero el resultado no fue como esperaba.

Mi proyecto actual: http://cl.ly/3q1f2t1O2Y3j

¡Lo tengo!

Déjeme explicar, usted necesita poner un id en su disposición que usted desea substituir, mi ejemplo:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/Framelay" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/txtSearchTopic" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="TextView" /> </FrameLayout> 

Así que solo pongo el mío: android: id = "@ + id / Framelay" Entonces puedo usar esta Id para reemplazar el nuevo fragmento, lo que quiero decir es que todo el contenido dentro de este Layout será reemplazado por el nuevo Fragmento, como Llamé a DetailFragment.

 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager .beginTransaction(); DetailFragment fragment3 = new DetailFragment(); fragmentTransaction.replace(R.id.Framelay, fragment3); fragmentTransaction.commit(); 
  • ¿Cómo hacer un seguimiento de los oyentes en Firebase en Android?
  • Detección de objetos reales utilizando la cámara. Posibilidades de encontrar objetos reales usando cámara
  • JSONObject.toString: cómo no escapar de barras
  • Android "Sólo el subproceso original que creó una jerarquía de vistas puede tocar sus vistas." Error en Fragmento
  • Android días restantes
  • OnBackPressed () Mejor práctica / rendimiento
  • Android Wear evita el sueño
  • Cómo repetir mi imagen de fondo, pero con la imagen diferente
  • Android - cómo analizar json con el objeto en el índice
  • ¿Cómo puedo detectar formas geométricas 2D básicas (por ejemplo, cuadrado, triángulo, círculo) en una imagen JPEG?
  • ¿Puedo autenticarme con AWS Cognito desde Java simple?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.