2015-03-31 3 views
1

Я хочу, чтобы достичь ниже концепции в андроиде: -Добавить фрагмент на другой фрагмент

Tab A -> Fragment A -> Fragment 1 -> Fragment 2 
Tab B -> Fragment B 
Tab C -> Fragment C 
Tab D -> Fragment D 

Я добавляю язычки зрения пейджера и в состоянии достигнуть до

Tab A -> Fragment A 
Tab B -> Fragment B 
Tab C -> Fragment C 
Tab D -> Fragment D 

Я попытался с

FragmentTransaction ft = getFragmentManager().beginTransaction(); 
ft.replace(android.R.id.content, fragment1); 
ft.addToBackStack(null); 
ft.commit(); 

, но не смог добавить еще один фрагмент на Fragment A.

добавление фрагмента 1 на Fragment A, но Fragment A все еще видно в фоновом режиме. Поэтому, пожалуйста, предоставьте некоторое предложение для достижения вышеуказанной задачи. Спасибо заранее.

+0

Вы должны применить прозрачный цвет фона к вашему контейнеру и родительскому макету. – Piyush

ответ

0

Это мое. Надеюсь, это полезно.

Во-первых, вам нужно создать ContentFragment для 4 вкладок A, B, C, D, как показано ниже:

public class ContentFragmentA extends BaseFragment { 
private static Context context; 

@SuppressWarnings("static-access") 
public ContentFragmentA(Context context) { 
    super(); 
    this.context = context; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 

    View view = inflater.inflate(R.layout.content_frame_a, container, false); 

    this.setFragmentManager(getChildFragmentManager()); 
    this.setContainerId(R.id.content_frame_a); 

    this.replaceFragmentIntoStack(new FragmentOne(context), "FragmentOne"); 

    return view; 
} 

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
}}  

Затем создайте файл content_fragment_a.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/content_frame_a" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

Затем для каждого нового фрагмента вы должны расширять BaseFragment. И если, если вы хотите поместить новый фрагмент в вкладку, просто используйте addFragmentIntoStack(), или replaceFragmentIntoStack().

public class BaseFragment extends Fragment{ 

private FragmentManager fragmentManager; 


private int containerId; 
private boolean doubleBackToExit = false; 
/** 
* @param containerId the containerId to set 
*/ 
public void setContainerId(int containerId) { 
    this.containerId = containerId; 
} 

/** 
* @param fragmentManager the fragmentManager to set 
*/ 
public void setFragmentManager(FragmentManager fragmentManager) { 
    this.fragmentManager = fragmentManager; 
} 

/** 
* 
*/ 
public BaseFragment() { 
    super(); 
    // TODO Auto-generated constructor stub 
    BarddyApplication.getInstance().baseFragment = BaseFragment.this; 
} 

public void addFragmentIntoStack(BaseFragment newContent, String tagName) { 
    newContent.setFragmentManager(fragmentManager); 
    newContent.setContainerId(containerId); 

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.add(containerId, newContent, tagName); 
    fragmentTransaction.addToBackStack(tagName); 

    fragmentTransaction.commitAllowingStateLoss(); 
} 

public void popFragment() { 
    fragmentManager.popBackStack(); 
} 

public void replaceFragmentIntoStack(BaseFragment newContent, String tagName) { 
    newContent.setFragmentManager(fragmentManager); 
    newContent.setContainerId(containerId); 

    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    fragmentTransaction.replace(containerId,newContent,tagName); 
    fragmentTransaction.addToBackStack(null); 

    fragmentTransaction.commitAllowingStateLoss(); 
}} 
0

Очень просто! Кулак нужно фрагментировать пустой, а затем вам нужно создать новый три фрагмента: Фрагмент A1, фрагмент 1, fragmen2 И теперь, когда вы выбрали вкладку A, вы показываете фрагмент A1 в фрагменте A

FragmentTransaction transaction = getFragmentManager() 
 
\t \t \t \t .beginTransaction(); 
 

 
\t \t transaction.replace(R.id.category_fragment, new CategoryFragment()); 
 

 
\t \t transaction.commit();
Теперь вы можете использовать фрагмент 1 или 2 метода replace() для идентификатора фрагмента A (а не идентификатора A1), чтобы заменить A1 фрагментом 1 или 2. Надейтесь, что он вам поможет!

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