У меня есть 4 TextView
и FragmentContainerView
.
FragmentContainerView
с помощью app:navGraph="@navigation/mobile_navigation"
обращается к navigation
. Мне нужно чтобы по нажатию на одну из TextView
менялись фрагменты находящиеся в "@navigation/mobile_navigation"
. То есть по нажатию на TextView1
в FragmentContainerView
виден 'Fragment1', по нажатию на TextView2
в FragmentContainerView
виден 'Fragment2' и т.д.
По сути это BottomNavigationView
только не через menu
.
Я построил архитектуру того как будет выглядеть xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:background="@color/color_1" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/fragment_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/llmain"
android:layout_below="@+id/view"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:layout_marginStart="0dp"
android:layout_marginLeft="0dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="0dp"
android:layout_marginRight="0dp"
android:layout_marginBottom="0dp"
app:defaultNavHost="true"
app:itemRippleColor="@color/color_2"
app:navGraph="@navigation/mobile_navigation" />
<LinearLayout
android:id="@+id/llmain"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_marginBottom="0dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_gravity="bottom"
android:orientation="horizontal">
<TextView
android:id="@+id/attraction_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/Attraction"
android:textColor="@android:color/holo_red_dark"
android:textSize="12sp" />
<TextView
android:id="@+id/rink_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/Rink"
android:textColor="@color/color_0"
android:textSize="12sp" />
<TextView
android:id="@+id/news_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/News"
android:textColor="@color/color_0"
android:textSize="12sp" />
<TextView
android:id="@+id/profile_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/Profile"
android:textColor="@color/color_0"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Но как правильно написать код чтобы всё это работало я не совсем понимаю. Помогите правильно написать код. Возможно есть как-то пример.
Также я написал код в котором использовал ViewPager
вместо FragmentContainerView
но в таком случае выдает ошибку.
HomeActivity3.java
public class HomeActivity3 extends AppCompatActivity implements View.OnClickListener{
private List<Fragment> list;
private ViewPager myViewPager;
private FraPagerAdapter adapter;
private TextView AttractionTXT;
private TextView RinkTXT;
private TextView NewsTXT;
private TextView ProfileTXT;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home3);
initView();
AttractionTXT = findViewById(R.id.attraction_text);
AttractionTXT.setOnClickListener(this);
RinkTXT = findViewById(R.id.rink_text);
RinkTXT.setOnClickListener(this);
NewsTXT = findViewById(R.id.news_text);
NewsTXT.setOnClickListener(this);
ProfileTXT = findViewById(R.id.profile_text);
ProfileTXT.setOnClickListener(this);
}
@SuppressLint("ClickableViewAccessibility")
private void initView() {
AttractionTXT = findViewById(R.id.attraction_text);
AttractionTXT.setOnClickListener(this);
RinkTXT = findViewById(R.id.rink_text);
RinkTXT.setOnClickListener(this);
NewsTXT = findViewById(R.id.news_text);
NewsTXT.setOnClickListener(this);
ProfileTXT = findViewById(R.id.profile_text);
ProfileTXT.setOnClickListener(this);
myViewPager = findViewById(R.id.content);
myViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
{
}
@Override
public void onPageSelected(int position) {
switch (position) {
case 0:
AttractionTXT.setTextColor(Color.RED);
RinkTXT.setTextColor(Color.BLACK);
NewsTXT.setTextColor(Color.BLACK);
ProfileTXT.setTextColor(Color.BLACK);
break;
case 1:
AttractionTXT.setTextColor(Color.BLACK);
RinkTXT.setTextColor(Color.RED);
NewsTXT.setTextColor(Color.BLACK);
ProfileTXT.setTextColor(Color.BLACK);
break;
case 2:
AttractionTXT.setTextColor(Color.BLACK);
RinkTXT.setTextColor(Color.BLACK);
NewsTXT.setTextColor(Color.RED);
ProfileTXT.setTextColor(Color.BLACK);
break;
case 3:
AttractionTXT.setTextColor(Color.BLACK);
RinkTXT.setTextColor(Color.BLACK);
NewsTXT.setTextColor(Color.BLACK);
ProfileTXT.setTextColor(Color.RED);
break;
}
}
@Override
public void onPageScrollStateChanged(int SCROLL_STATE_SETTLING)
{
}
});
list = new ArrayList<>();
list.add(new FragmentAttraction());
list.add(new FragmentRink());
list.add(new FragmentNews());
list.add(new FragmentProfile());
adapter = new FraPagerAdapter(getSupportFragmentManager(),
FragmentPagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT, list);
myViewPager.setAdapter(adapter);
myViewPager.setCurrentItem(0);
myViewPager.setOnTouchListener(null);
myViewPager.setOnTouchListener((arg0, arg1) -> true);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.attraction_text:
myViewPager.setCurrentItem(0);
break;
case R.id.rink_text:
myViewPager.setCurrentItem(1);
break;
case R.id.news_text:
myViewPager.setCurrentItem(2);
break;
case R.id.profile_text:
myViewPager.setCurrentItem(3);
}
}
}
activity_home3.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="25dp"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentRight="true"
android:background="@color/color_1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/view"
android:orientation="vertical">
<androidx.viewpager.widget.ViewPager
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_gravity="bottom"
android:orientation="horizontal">
<TextView
android:id="@+id/attraction_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:text="@string/Attraction"
android:textColor="@android:color/holo_red_dark"
android:textSize="12sp" />
<TextView
android:id="@+id/rink_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:gravity="center"
android:textColor="@color/color_0"
android:text="@string/Rink"
android:textSize="12sp" />
<TextView
android:id="@+id/news_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:textColor="@color/color_0"
android:gravity="center"
android:text="@string/News"
android:textSize="12sp" />
<TextView
android:id="@+id/profile_text"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_weight="1"
android:textColor="@color/color_0"
android:gravity="center"
android:text="@string/Profile"
android:textSize="12sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
Ошибка
java.lang.IllegalStateException: View androidx.coordinatorlayout.widget.CoordinatorLayout{fe08792 V.E...... ........ 0,0-1080,1710} does not have a NavController set
at androidx.navigation.Navigation.findNavController(Navigation.java:84)
at com.example.test.Attraction.FragmentAttraction.lambda$onViewCreated$0(FragmentAttraction.java:41)
at com.example.test.Attraction.-$$Lambda$FragmentAttraction$004jlQ19iU0hh9boehMD8kBcdfE.onClick(lambda)
Если решить эту ошибку то можно и ViewPager
использовать. Подскажите как её решить.
Ну сделайте что-то вроде этого. Определите метод в вашей активити, отвечающий за смену фрагментов внутри FragmentView. Вроде такого:
public void openFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_CLOSE);
transaction.replace(R.id.fragment_container, fragment);
transaction.addToBackStack(null);
transaction.commit();
}
После добавьте обработчики нажатий на ваши TextVeiw:
textView1.setOnClickListener(view -> {
openFragment(new YourFragment());
});
textView2.setOnClickListener(view -> {
openFragment(new YourFragmentOther());
});
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня есть entity с подключенным spring-boot-starter-data-rest
Компьютер генерирует пять чисел в диапазоне от 1 до 15 включительно
Я новичок в AWS у меня есть программа, которая делает некие операции над видео (конвертирует один формат в другой (есть два бакита в первый загружается...