非常容易学的android笔记3

Tue, Dec 20, 2022 2-minute read

RecyclerView, nav menu, 滑动窗口, 以及nav drawer菜单, PagerAdapter新版中应用

up button

回退选项

TextView

up button

就是在Order Activity中加个父类,就是回退回倒哪个activity

AndroidManifest.xml

<activity android:name="com.example.android.droidcafeinput.OrderActivity"
    android:label="Order Activity"
    android:parentActivityName=".MainActivity">
    <meta-data android:name="android.support.PARENT_ACTIVITY"
        android:value=".MainActivity"/>
</activity>

☕☕

滑动窗口

超级无语,又是一个改变很多的,就安卓官网的教程,还不更新?

滑动窗口

TextView

TabLayout

activity_main.xml

4个元素 就是这样,滑动窗口主要靠TabLayout 和 ViewPages2 实现

<RelationLayout

    <androidx.appcompat.widget.Toolbar

     <com.google.android.material.tabs.TabLayout

    <androidx.viewpager2.widget.ViewPager2

</RelativeLayout>

layout中加入三个fragment页面,其实就是滑动的3个窗口

右键,new 一个 Fragment

在layout下面,加入一些 TextView,区分三个不同文字。

对应的就是三个相关的Fragment class

删掉乱起八糟的,就剩一个 onCreateView 就好

public class TabFragment1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_home, container, false);
    }
}

滑动窗口的适配器, 用 FragmentStateAdapter

public class PagerAdapter extends FragmentStateAdapter {




// FragmentManager 后面主程序中有用, 

    public PagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);

    }

// 表示几个窗口

    @Override
    public int getItemCount() {
        return 3;
    }

// 对应的位置
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        switch (position) {
            case 1: return new TabFragment2();
            case 2: return new TabFragment3();

            default: return new TabFragment1();
        }
    }
}

主程序

  • 置入三元素:ViewPager2, TabLayout, PagerAdapter

  • findViewById(layout, viewpages2)

  • 用FragmentManager链接PagerAdapter

  • viewPage2.setAdapter()

  • tablayout,把按标题倒哪个窗口的功能实现好–tabs.addTab(tabs.newTab().setText(R.string.tab_label1));

  • tablayout的互动功能,主要是改下下面的方法

    
        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }
    
  • 链接 ViewPager2滑动监听viewPager.registerOnPageChangeCallback()

public class MainActivity extends AppCompatActivity {

    // 置入三元素
    ViewPager2 viewPager;
    TabLayout tabs;
    PagerAdapter adapter;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TabLayout tabs = findViewById(R.id.tab_layout);
        viewPager = findViewById(R.id.view_pager);




        FragmentManager fragmentManager = getSupportFragmentManager();
        adapter = new PagerAdapter(fragmentManager,getLifecycle());
        viewPager.setAdapter(adapter);

        tabs.addTab(tabs.newTab().setText(R.string.tab_label1));
        tabs.addTab(tabs.newTab().setText(R.string.tab_label2));
        tabs.addTab(tabs.newTab().setText(R.string.tab_label3));

        tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {


            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                viewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                tabs.selectTab(tabs.getTabAt(position));
            }
        });
    }

}

完成