Привет, я исправил вас, см. Ниже решение. В идеале вам нужно создать один дополнительный BaseContainerFragment. У этого есть framelayout. Затем создайте фрагмент контейнера для каждого из четырех статических фрагментов. допустим, у меня есть два фрагмента с соответствующим фрагментом контейнера. см. ниже код.
Оригинальный фрагмент:
- AlertFragment.java
- ChatFragment.java
BaseContainerFragment.java
общественного класса BaseContainerFragment расширяет фрагмент {
public BaseContainerFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void replaceFragment(Fragment fragment, boolean addToBackStack) {
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
if (addToBackStack) {
transaction.addToBackStack(null);
}
transaction.replace(R.id.container_framelayout, fragment);
transaction.commit();
getChildFragmentManager().executePendingTransactions();
}
public boolean popFragment() {
boolean isPop = false;
if (getChildFragmentManager().getBackStackEntryCount() > 0) {
isPop = true;
getChildFragmentManager().popBackStack();
}
return isPop;
}
}
Контейнер Фрагмент, который расширяет над BaseContainerFragment:
- AlertContainerFragment.java расширяет BaseContainerFragment.java
- ChatContainerFragment.java расширяет BaseContainerFragment.java
Теперь в вашем FragmentActivity вы необходимо добавить ContainerFragment каждого фрагмента внутри FragmentTabHost.see ниже код.
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentTabHost;
import android.view.Menu;
import android.view.MenuItem;
public class TestSukhwantTabHost extends FragmentActivity {
private FragmentTabHost mTabHost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_sukhwant_tab_host);
mTabHost = (FragmentTabHost) findViewById(R.id.tabhost);
mTabHost.setup(this, getSupportFragmentManager(), R.id.tabFrameLayout);
mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator(null, getResources().getDrawable(R.drawable.ic_launcher)),AlertContainerFragment.class, null);
mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator(null, getResources().getDrawable(R.drawable.ic_launcher)),ChatContainerFragment.class, null);
mTabHost.getTabWidget().setStripEnabled(false);
mTabHost.setCurrentTab(0);
}
}
Теперь я отправляю код фрагмента контейнера, этот фрагмент контейнера фактически загружает наш оригинальный фрагмент. Чтобы загрузить фрагмент внутри фрагмента, мы использовали метод фрагмента контейнера для замены нового фрагмента.
fragment_base_container.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/container_framelayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
AlertContainerFragment.Java
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class AlertContainerFragment extends BaseContainerFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_base_container, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
}
private void initView() {
replaceFragment(new AlertFragment(), false);
}
}
ChatContainerFragment.java
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class ChatContainerFragment extends BaseContainerFragment {
public ChatContainerFragment() {
// 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_base_container, container, false);
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initView();
}
private void initView() {
replaceFragment(new ChatFragment(), false);
}
}
Оригинальный фрагмент:
Ниже AlertFragment.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class AlertFragment extends Fragment {
private Button framgnet1_button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
View mView = inflater.inflate(R.layout.fragment_alert, container, false);
framgnet1_button = (Button) mView.findViewById(R.id.framgnet1_button);
framgnet1_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((BaseContainerFragment)getParentFragment()).replaceFragment(new DynamicAlertFramgnet(), false);
}
});
return mView;
}
}
ChatFragment.java
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class ChatFragment extends Fragment {
private Button button_chart_fragment;
public ChatFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View mView = inflater.inflate(R.layout.fragment_chat, container, false);
button_chart_fragment = (Button)mView.findViewById(R.id.button_chart_fragment);
button_chart_fragment.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
((BaseContainerFragment)getParentFragment()).replaceFragment(new DynamicChartFramgnet(), false);
}
});
return mView;
}
}
В коде выше, что я был реализован, каждый оригинальный фрагмент имеет кнопку при нажатии на нее, она будет загружать новый фрагмент.
Дайте мне знать, если у вас есть вопросы &, просьба сообщить свое предложение.
Спасибо
Пожалуйста, измените свой вопрос правильный путь, дайте мне знать в UserFragment внутри вкладки хоста, который вы хотите заменить фрагмент в одной и той же деятельности. что вы действительно хотите сделать, вы можете правильно объяснить. –
@BhavdipPathar мой «FragmentTabHost» имеет 4 разных фрагмента .. но после смены вкладок .. 3 вкладки имеют один и тот же фрагмент –
. Тогда что означает, что каждый фрагмент имеет кнопку и нажимает на нее, вы хотите загрузить другой фрагмент, вы столкнулись с когда вы пытались заменить фрагмент внутри фрагмента. –