У меня есть вопрос об открытии нового фрагмента из ViewPager.
Я настроил FragmentA, FragmentB и Fragment C как фрагменты окна просмотра, а затем приступил к настройке Fragment1 и Fragment2 как фрагментов другого окна просмотра, находящегося во FragmentB.
Таким образом, Fragment1 и Fragment2 находятся в окне просмотра, которое по существу вложено в другое окно просмотра. Я играю со стилями пользовательского интерфейса et c, и это похоже на то, что можно найти в приложении Flickr.
Проблема, с которой я сталкиваюсь, заключается в том, что, как только я попадаю во фрагмент1 или фрагмент2 (вложенный фрагмент), я хочу иметь возможность щелкнуть что-нибудь и ввести полноэкранный фрагмент, минуя панель инструментов, которую я настроил во FragmentB ,
Ниже приведен код, который у меня есть для FragmentB с панелью инструментов, tablayout и viewpager.
package com.app.fragmentdemo;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.google.android.material.tabs.TabLayout;
public class FragmentB extends Fragment {
public FragmentB() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_b,container,false);
Toolbar toolbar = (Toolbar) rootView.findViewById(R.id.toolbar);
TabLayout tabLayout = (TabLayout) rootView.findViewById(R.id.tabs);
ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.viewPagerFragmentB);
ViewPagerAdapter adapter = new ViewPagerAdapter(((FragmentActivity) getContext()).getSupportFragmentManager());
adapter.addFragment(new Fragment1(),"Fragment 1");
adapter.addFragment(new Fragment2(),"Fragment 2");
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
// Inflate the layout for this fragment
return rootView;
}
}
Вот код, который я собрал для фрагмента 2, который содержит кнопку, которую я хотел бы чтобы взять меня к другому фрагменту.
package com.app.fragmentdemo;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
public class Fragment2 extends Fragment {
public Fragment2() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_2,container,false);
Button button = (Button) rootView.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Fragment fragment = new FragmentFull();
FragmentManager fm = ((FragmentActivity) getContext()).getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragmentFullContainer,fragment);
ft.commit();
Toast.makeText(getActivity(), "Button Clicked", Toast.LENGTH_SHORT).show();
}
});
// Inflate the layout for this fragment
return rootView;
}
}
После нажатия кнопки приложение вылетает. Я получаю сообщение об ошибке:
Не найдено представление для идентификатора 0x7f080084 (com.app.fragmentdemo: id / fragFullContainer) для фрагмента FragmentFull
Если я изменю идентификатор контейнера фрагмента на идентификатор I назначенный для файла макета Fragment2, он работает нормально. Тем не менее, он все еще содержится во вложенном окне просмотра и не позволяет мне вводить новый макет.
Я очень ценю вашу помощь.
Спасибо.