Я следил за этим руководством https://thewikihow.com/video_zcnT-3F-9JA Я использовал его код из github, но вывод неверный. Я поместил 3 вкладки вверху, и когда я нажимаю на вкладку, активность должна измениться, но на самом деле ничего не происходит, у меня на экране остается только main_activity. Надеюсь, кому-то поможет. Вот мои коды
PS - Да, у меня также есть 3 xml файла для каждого фрагмента (даже у меня также есть main_activity, но я должен выяснить, что не так, а затем назначить 1 вкладку с основным действием). У меня также есть 3 java файла для этих 3 вкладок.
XML
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:background = "#FFFFFF"
android:orientation = "vertical"
tools:context = ".MainActivity">
<RelativeLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content">
<android.support.design.widget.TabLayout
android:id = "@+id/tabs"
android:layout_width = "match_parent"
android:layout_height = "wrap_content" />
<android.support.v4.view.ViewPager
android:id = "@+id/container"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
app:layout_behavior = "@string/appbar_scrolling_view_behavior" />
<TextView
android:id = "@+id/lvltext"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_below = "@id/expa"
android:layout_centerInParent = "true"
android:fontFamily = "@font/futuracondensed"
android:text = "@string/leveltext"
android:textColor = "@color/black"
android:textSize = "30sp" />
<TextView
android:id = "@+id/lvlnum"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_below = "@id/lvltext"
android:layout_centerInParent = "true"
android:fontFamily = "@font/futuracondensed"
android:text = "@string/levelnum"
android:textColor = "@color/black"
android:textSize = "30sp" />
<ImageView
android:id = "@+id/girl"
android:layout_width = "wrap_content"
android:layout_height = "262dp"
android:layout_below = "@id/lvlnum"
android:src = "@drawable/girl" />
<Button
android:id = "@+id/button"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:layout_below = "@id/girl"
android:fontFamily = "@font/futuracondensed"
android:text = "@string/button"
android:textColor = "@color/black" />
<ImageView
android:id = "@+id/girl2"
android:layout_width = "match_parent"
android:layout_height = "258dp"
android:layout_below = "@id/button"
android:src = "@drawable/fitnessmodel" />
<Button
android:id = "@+id/button2"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:layout_below = "@id/girl2"
android:fontFamily = "@font/futuracondensed"
android:text = "@string/button2"
android:textColor = "@color/black" />
<LinearLayout
android:layout_below = "@id/tabs"
android:id = "@+id/expa"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:orientation = "horizontal">
<LinearLayout
android:layout_width = "0dp"
android:layout_height = "wrap_content"
android:layout_weight = "1"
android:orientation = "vertical">
<TextView
android:id = "@+id/team_a_score"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:fontFamily = "@font/futuracondensed"
android:gravity = "center"
android:paddingBottom = "5dp"
android:text = "0"
android:textColor = "@color/black"
android:textSize = "60sp" />
</LinearLayout>
<View
android:layout_width = "1dp"
android:layout_height = "match_parent"
android:layout_marginTop = "0dp"
android:background = "@color/black" />
<LinearLayout
android:layout_width = "0dp"
android:layout_height = "match_parent"
android:layout_weight = "1"
android:orientation = "vertical">
<TextView
android:id = "@+id/team_b_score"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:fontFamily = "@font/futuracondensed"
android:gravity = "center"
android:paddingBottom = "5dp"
android:text = "100"
android:textColor = "@color/black"
android:textSize = "60sp" />
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>
Ява
public class MainActivity extends AppCompatActivity {
private SectionsPageAdapter mSectionsPageAdapter;
private ViewPager mViewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mSectionsPageAdapter = new SectionsPageAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
private void setupViewPager(ViewPager viewPager) {
SectionsPageAdapter adapter = new SectionsPageAdapter(getSupportFragmentManager());
adapter.addFragment(new Tab1Fragment(), "TAB1");
adapter.addFragment(new Tab2Fragment(), "TAB2");
adapter.addFragment(new Tab3Fragment(), "TAB3");
viewPager.setAdapter(adapter);
}
@Override
public void onResume() {
super.onResume();
}
}
public class SectionsPageAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
public SectionsPageAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
}
Да, я сделал все, как в учебнике (на каждой вкладке есть кнопка с всплывающим сообщением, за исключением того, что у меня есть собственное основное действие). Я хочу, чтобы это было так, когда я запускаю приложение, я нахожусь на первой вкладке (основное действие), а затем, когда я нажимаю на другую вкладку (tab2), я перехожу на другой экран.
Проблема в вашем макете, а не в вашем коде. U использовал вложенную прокрутку внутри, вы использовали вкладки и viepager. Вот почему вещи не работают.




попробуйте этот код:
OneFragment.java
OneFragment.java
package info.androidhive.materialtabs.fragments;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import info.androidhive.materialtabs.R;
public class OneFragment extends Fragment{
public OneFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_one, container, false);
}
}
fragment_one.xml
fragment_one.xml
<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = "info.androidhive.materialtabs.fragments.OneFragment">
<TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "@string/one"
android:textSize = "40dp"
android:textStyle = "bold"
android:layout_centerInParent = "true"/>
</RelativeLayout>
activity_main.xml
<android.support.design.widget.CoordinatorLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:layout_width = "match_parent"
android:layout_height = "match_parent">
<android.support.design.widget.AppBarLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:theme = "@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.v7.widget.Toolbar
android:id = "@+id/toolbar"
android:layout_width = "match_parent"
android:layout_height = "?attr/actionBarSize"
android:background = "?attr/colorPrimary"
app:layout_scrollFlags = "scroll|enterAlways"
app:popupTheme = "@style/ThemeOverlay.AppCompat.Light" />
<android.support.design.widget.TabLayout
android:id = "@+id/tabs"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
app:tabMode = "fixed"
app:tabGravity = "fill"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.view.ViewPager
android:id = "@+id/viewpager"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
app:layout_behavior = "@string/appbar_scrolling_view_behavior" />
</android.support.design.widget.CoordinatorLayout>
MainActivity.java
package info.androidhive.materialtabs.activity;
import android.os.Bundle;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import java.util.ArrayList;
import java.util.List;
import info.androidhive.materialtabs.R;
import info.androidhive.materialtabs.fragments.OneFragment;
import info.androidhive.materialtabs.fragments.ThreeFragment;
import info.androidhive.materialtabs.fragments.TwoFragment;
[![][1]][1]public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
}
private void setupViewPager(ViewPager viewPager) {
ViewPagerAdapter adapter = new
ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new OneFragment(), "ONE");
adapter.addFragment(new TwoFragment(), "TWO");
adapter.addFragment(new ThreeFragment(), "THREE");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
}
и добавляем основное действие, вызывающее 3 вкладки
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int pos) {
switch(pos) {
case 0: return SimpleFragment.newInstance("FirstFragment, Instance 1");
case 1: return PieView.newInstance("SecondFragment, Instance 1");
case 2: return PieView1.newInstance("ThirdFragment, Instance 1");
case 3: return DataSaveDetails.newInstance("ThirdFragment, Instance 1");
default:
}
return null;
}
это работает, попробуйте это
Я реорганизовал все с помощью вашего кода ... Ну, во-первых, «стрелка назад» никогда не исчезает и ничего не делает, и, самое главное, я все еще выполняю основное действие, и это не меняется, когда я нажимаю на вкладку.
Вы предоставили код из другой программы ... У меня нет "SimpleFragment" и т. д., Я пытался поместить туда "OneFragment", не работающий ...
Использовал этот общедоступный фрагмент getItem (int position) {switch (position) {case 0: return new OneFragment (); случай 1: вернуть новый TwoFragment (); случай 2: вернуть новый ThreeFragment (); по умолчанию:} return null; }
В вашем методе getItem (). Используйте Switch и возвращайте их фрагменты вместо добавления всех фрагментов в метод addFragment.
public Fragment getItem(int position){
switch(position){
case 0 : return new Tab1Fragment();
case 1 : return new Tab2Fragment();
case 2 : return new Tab3Fragment();
}
}
Спасибо, я знаю, о чем вы говорите, но, как видите, у меня проблемы другого типа.
используйте этот XML, как указано в библиотеке, за которой вы следовали, а затем любой дизайн, который вы хотите добавить в макеты фрагментов, которые вы приняли. все будет работать нормально
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout
xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:orientation = "vertical"
tools:context = "com.example.chirag.slidingtabsusingviewpager.MainActivity">
<android.support.v7.widget.Toolbar
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:id = "@+id/toolbar"
android:background = "@color/colorPrimary"
android:minHeight = "?attr/actionBarSize"
android:theme = "@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme = "@style/ThemeOverlay.AppCompat.Light">
<TextView
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "SlidingTabsUsingViewPager"
android:textSize = "20dp"/>
</android.support.v7.widget.Toolbar>
<android.support.design.widget.TabLayout
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:id = "@+id/tablayout"
android:background = "@color/colorPrimary"
android:minHeight = "?attr/actionBarSize"
android:theme = "@style/ThemeOverlay.AppCompat.Dark.ActionBar">
</android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:layout_width = "match_parent"
android:layout_height = "fill_parent"
android:id = "@+id/pager">
</android.support.v4.view.ViewPager>
</LinearLayout>
Честно говоря, ты мой герой и гений! Но единственное, что нужно отполировать. Теперь наверху у меня есть «Панель инструментов», которую я хочу удалить (если это возможно), потому что теперь у меня есть «дополнительная» панель со «стрелкой назад» и строкой на панели инструментов «Имя моего приложения + SlidingTabsUsingViewPager», можете вы угадай, что я могу сделать?
Ну, может быть, я привел сбивающее с толку объяснение, как это выглядит (не могу найти снимок экрана на моем телефоне), так что это похоже на комментарий Android Geek ниже.
(удалить строку заголовка и т. д.) stackoverflow.com/questions/2591036/…
(или вы можете использовать это) stackoverflow.com/questions/36236181/…
Ссылки, которые вы предоставили, не помогают, потому что они удаляют строку состояния (сеть, Wi-Fi, время и т. д.), А не то, о чем я говорил.
Я удалил из вас текстовое представление xml "SlidingTabsUsingViewPager", теперь у меня вверху отображается имя моего приложения, я пытался удалить его на Java (обычно работает) и пытался сделать это в xml, ничего не работает, я думаю, это потому, что у меня есть панель инструментов "в xml ... Я сейчас очень запутался ....
Я сделал это полностью! Сам я удалил Toolbar из XML и добавил эти строки Java // toolbar = (Toolbar) findViewById (R.id.toolbar); // setSupportActionBar (панель инструментов); //getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Вы добавляли какой-либо контент в
Tab1Fragment,Tab2FragmentиTab3Fragment? При нажатии наTabон заменитFragmentвViewPager, не изменит активность