Java 单击选项卡布局项时,选项卡未更改
单击选项卡布局(选项卡按钮)时,碎片(选项卡)不会更改 我尝试了以下代码 MainActivity.javaJava 单击选项卡布局项时,选项卡未更改,java,android,Java,Android,单击选项卡布局(选项卡按钮)时,碎片(选项卡)不会更改 我尝试了以下代码 MainActivity.java package com.kunal.flightstatus; import androidx.appcompat.app.AppCompatActivity; import androidx.viewpager.widget.ViewPager; import android.net.Uri; import android.os.Bundle; import com.google
package com.kunal.flightstatus;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.net.Uri;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.addTab(tabLayout.newTab().setText("Home"));
tabLayout.addTab(tabLayout.newTab().setText("Favourite"));
tabLayout.addTab(tabLayout.newTab().setText("Search"));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
final ViewPager viewPager = findViewById(R.id.viewpager);
PageAdapter adapter = new PageAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
}
}
PagerAdapter.java
package com.kunal.flightstatus;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
public class PageAdapter extends FragmentPagerAdapter {
public PageAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 0 :
Tab1 tab1 = new Tab1();
position +=1;
Bundle bundle = new Bundle();
bundle.putString("message","fragment :"+position);
tab1.setArguments(bundle);
return tab1;
case 1 :
Tab2 tab2 = new Tab2();
position +=1;
Bundle bundl = new Bundle();
bundl.putString("message","fragment :"+position);
tab2.setArguments(bundl);
return tab2;
case 2 :
Tab3 tab3 = new Tab3();
position +=1;
Bundle bundlee = new Bundle();
bundlee.putString("message","fragment :"+position);
tab3.setArguments(bundlee);
return tab3;
default:
return null;
}
}
@Override
public int getCount() {
return 3;
}
}
activity_main.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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<com.google.android.material.tabs.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">
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:id="@+id/viewpager">
</androidx.viewpager.widget.ViewPager>
</LinearLayout>
单击选项卡布局项时,应更改选项卡(片段)ViewPager,需要链接选项卡布局以切换到工作状态
tabLayout.setupWithViewPager(viewPager);
我们应该做到这一点
这样,TabLayout
将连接到ViewPager
并自动填充。在FragmentPagerAdapter
中执行CharSequence getPageTitle(int位置)
以填充标题,而不是手动调用tabLayout.addTab()
:
@NonNull
private List<String> titles = Arrays.asList("Home", "Favourite", "Search");
@Override
public CharSequence getPageTitle (int position) {
return titles.get(position);
}
PagerAdapter:
package com.kunal.flightstatus;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.Arrays;
import java.util.List;
public class PageAdapter extends FragmentPagerAdapter {
@NonNull
private List<String> titles = Arrays.asList("Home", "Favourite", "Search");
public PageAdapter(@NonNull FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@Override
public CharSequence getPageTitle (int position) {
return titles.get(position);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 0 :
Tab1 tab1 = new Tab1();
position +=1;
Bundle bundle = new Bundle();
bundle.putString("message","fragment :"+position);
tab1.setArguments(bundle);
return tab1;
case 1 :
Tab2 tab2 = new Tab2();
position +=1;
Bundle bundl = new Bundle();
bundl.putString("message","fragment :"+position);
tab2.setArguments(bundl);
return tab2;
case 2 :
Tab3 tab3 = new Tab3();
position +=1;
Bundle bundlee = new Bundle();
bundlee.putString("message","fragment :"+position);
tab3.setArguments(bundlee);
return tab3;
default:
throw new IllegalStateException();
}
}
@Override
public int getCount() {
return 3;
}
}
package com.kunal.flightstatus;
导入android.os.Bundle;
导入androidx.annotation.NonNull;
导入androidx.fragment.app.fragment;
导入androidx.fragment.app.FragmentManager;
导入androidx.fragment.app.FragmentPagerAdapter;
导入java.util.array;
导入java.util.List;
公共类PageAdapter扩展了FragmentPagerAdapter{
@非空
私有列表标题=array.asList(“主页”、“收藏夹”、“搜索”);
公共页面适配器(@NonNull FragmentManager fm){
超级(fm,行为\恢复\仅\当前\片段);
}
@凌驾
公共字符序列getPageTitle(int位置){
返回标题。获取(位置);
}
@非空
@凌驾
公共片段getItem(int位置){
开关(位置){
案例0:
Tab1 Tab1=新Tab1();
位置+=1;
Bundle=新Bundle();
bundle.putString(“消息”,“片段:+位置”);
表1.setArguments(bundle);
返回表1;
案例1:
Tab2 Tab2=新Tab2();
位置+=1;
Bundle Bundle=新Bundle();
bundle.putString(“消息”,“片段:+位置”);
表2.设置参数(捆绑);
返回表2;
案例2:
Tab3 Tab3=新Tab3();
位置+=1;
Bundle bundlee=新Bundle();
bundlee.putString(“消息”,“片段:+位置”);
表3.设置参数(bundlee);
返回表3;
违约:
抛出新的非法状态异常();
}
}
@凌驾
public int getCount(){
返回3;
}
}
super(fm)已删除固定。xml中还有android:orientation=“horizontal”
,这也阻止了ViewPager本身显示我在这里修复的问题。
package com.kunal.flightstatus;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewpager.widget.ViewPager;
import android.os.Bundle;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ViewPager viewPager = findViewById(R.id.viewpager);
PageAdapter adapter = new PageAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
TabLayout tabLayout = findViewById(R.id.tablayout);
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
tabLayout.setupWithViewPager(viewPager);
}
}
package com.kunal.flightstatus;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.Arrays;
import java.util.List;
public class PageAdapter extends FragmentPagerAdapter {
@NonNull
private List<String> titles = Arrays.asList("Home", "Favourite", "Search");
public PageAdapter(@NonNull FragmentManager fm) {
super(fm, BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
}
@Override
public CharSequence getPageTitle (int position) {
return titles.get(position);
}
@NonNull
@Override
public Fragment getItem(int position) {
switch (position){
case 0 :
Tab1 tab1 = new Tab1();
position +=1;
Bundle bundle = new Bundle();
bundle.putString("message","fragment :"+position);
tab1.setArguments(bundle);
return tab1;
case 1 :
Tab2 tab2 = new Tab2();
position +=1;
Bundle bundl = new Bundle();
bundl.putString("message","fragment :"+position);
tab2.setArguments(bundl);
return tab2;
case 2 :
Tab3 tab3 = new Tab3();
position +=1;
Bundle bundlee = new Bundle();
bundlee.putString("message","fragment :"+position);
tab3.setArguments(bundlee);
return tab3;
default:
throw new IllegalStateException();
}
}
@Override
public int getCount() {
return 3;
}
}