我怎样才能以一种好的方式做到这一点(Fragment 和 viewpager)?

时间:2021-04-27 11:43:12

标签: android-studio android-fragments android-viewpager2

我为我的学校构建了这个项目(学校应用)。由于缺乏 Idea,我创建了 3 个 ViewPager2 container (SemesterFragment) 来保存 viewpager 片段,再次,我创建了 ViewPager2 适配器 个类,以及 3 个 Fragment(CS_SemestersSTA_SemestersSLT_Semesters)类填充 4 Fragment(sem2,sem3 和 sem4) 每当在回收视图中单击项目时,就会在 ViewPager2 内部。

注意:

  • 我的应用程序运行良好,正在做我想做的事情

问题:

  • 尽管代码运行良好,但如果您可以观察到有很多声誉代码。
  • 我想让这些类中的每一个都成为一个,我该怎么做??因为代码相同只是数据不同。谢谢

CS_Semesters.java

package com.example.viewpager2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class CS_Semesters extends Fragment{
    List<SemesterModelClass> mData,b;
    RVFragment adapter;
    RecyclerView recyclerView;

public CS_Semesters(int position) {
    mData = getList(position);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment, container, false);
    recyclerView = view.findViewById(R.id.recyclerView);
    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    adapter = new RVFragment(getContext(),mData);

    recyclerView.setAdapter(adapter);
    return view;
}

private List<SemesterModelClass> getList(int position) {
    List<SemesterModelClass> list = new ArrayList<>();
    if (position == 0) {
        //fragment one inside viewpager whenever item1 is clicked from the recyclerView
        list.add(new SemesterModelClass("intro. to comp", "com101", "3"));
        list.add(new SemesterModelClass("digital electonics", "com112", "3"));
        list.add(new SemesterModelClass("intro to programming", "com113", "4"));
    } else if (position == 1) {
        //fragment two inside viewpager whenever item1 is clicked from the recyclerView
        list.add(new SemesterModelClass("sem2", "com111", "3"));
        list.add(new SemesterModelClass("sem2", "com222", "5"));
        list.add(new SemesterModelClass("sem2", "com121", "4"));
    } else if (position == 2) {
        //fragment three inside viewpager whenever item1 is clicked from the recyclerView
        list.add(new SemesterModelClass("sem3", "com111", "3"));
        list.add(new SemesterModelClass("sem3", "com222", "5"));
        list.add(new SemesterModelClass("sem3", "com121", "4"));
    } else {
        //fragment four inside viewpager whenever item1 is clicked from the recyclerView
        list.add(new SemesterModelClass("sem4", "com111", "3"));
        list.add(new SemesterModelClass("sem4", "com222", "5"));
        list.add(new SemesterModelClass("sem4", "com121", "4"));
    }
    return list;
}
}

 

STA_Semesters.java

package com.example.viewpager2;

import android.os.Bundle;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import java.util.ArrayList;
import java.util.List;

public class STA_Semesters extends Fragment {
    List<SemesterModelClass> mData;
    RVFragment adapter;
    RecyclerView recyclerView;

public STA_Semesters(int position) {
    mData = getList(position);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment, container, false);
    recyclerView = view.findViewById(R.id.recyclerView);

    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    adapter = new RVFragment(getContext(),mData);
    recyclerView.setAdapter(adapter);
    return view;
}

private  List<SemesterModelClass>  getList(int position){
    List<SemesterModelClass> list = new ArrayList<>();
    if(position == 0) {
        //fragment one inside viewpager whenever item2 is clicked from the recyclerView
        list.add(new SemesterModelClass("probability", "STA 111", "3"));
        list.add(new SemesterModelClass("algebra", "STA 112", "4"));
        list.add(new SemesterModelClass("logic", "STA 113", "3"));
        list.add(new SemesterModelClass("geometri func", "STA 114", "4"));
    }else if(position == 1) {
        //fragment two inside viewpager whenever item2 is clicked from the recyclerView
        list.add(new SemesterModelClass("set theory", "STA 111", "3"));
        list.add(new SemesterModelClass("dedvwvdv", "STA 112", "4"));
        list.add(new SemesterModelClass("fbcfvdv", "STA 113", "3"));
        list.add(new SemesterModelClass("cvsvsdvs", "STA 114", "4"));
    }else if(position == 2) {
        //fragment three inside viewpager whenever item2 is clicked from the recyclerView
        list.add(new SemesterModelClass("svsvdvas", "STA 111", "3"));
        list.add(new SemesterModelClass("semdvbv3", "STA 112", "4"));
        list.add(new SemesterModelClass("dedgsedv", "STA 113", "3"));
        list.add(new SemesterModelClass("frgs", "STA 114", "4"));
    }else{
        //fragment four inside viewpager whenever item2 is clicked from the recyclerView
        list.add(new SemesterModelClass("sem4ffffffff", "STA 111", "3"));
        list.add(new SemesterModelClass("sem4fff", "STA 112", "4"));
        list.add(new SemesterModelClass("sem4gtgg", "STA 113", "3"));
        list.add(new SemesterModelClass("sem4uku", "STA 114", "4"));
    }
    return list;
    }
}

SLT_Semesters.java

package com.example.viewpager2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import java.util.ArrayList;
import java.util.List;

public class SLT_Semesters extends Fragment {
    List<SemesterModelClass> mData;
    RVFragment adapter;
    RecyclerView recyclerView;
public SLT_Semesters(int position) {
    mData = getList(position);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment, container, false);
    recyclerView = view.findViewById(R.id.recyclerView);

    LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
    recyclerView.setLayoutManager(layoutManager);
    adapter = new RVFragment(getContext(),mData);
    recyclerView.setAdapter(adapter);

    return view;
}

private  List<SemesterModelClass>  getList(int position){
    List<SemesterModelClass> list = new ArrayList<>();
    if(position == 0) {
        //fragment one inside viewpager whenever item3 is clicked from the recyclerView
        list.add(new SemesterModelClass("titration", "SLT 111", "3"));
        list.add(new SemesterModelClass("matter", "SLT 112", "4"));
        list.add(new SemesterModelClass("element", "SLT 113", "3"));
        list.add(new SemesterModelClass("pratical", "SLT 114", "4"));
    }else if(position == 1) {
        //fragment two inside viewpager whenever item3 is clicked from the recyclerView
        list.add(new SemesterModelClass("set theory", "SLT 111", "3"));
        list.add(new SemesterModelClass("dedvwvdv", "SLT 112", "4"));
        list.add(new SemesterModelClass("fbcfvdv", "SLT 113", "3"));
        list.add(new SemesterModelClass("cvsvsdvs", "SLT 114", "4"));
    }else if(position == 2) {
        //fragment three inside viewpager whenever item3 is clicked from the recyclerView
        list.add(new SemesterModelClass("svsvdvas", "SLT 111", "3"));
        list.add(new SemesterModelClass("semdvbv3", "SLT 112", "4"));
        list.add(new SemesterModelClass("dedgsedv", "SLT 113", "3"));
        list.add(new SemesterModelClass("frgs", "SLT 114", "4"));
    }else{
        //fragment four inside viewpager whenever item3 is clicked from the recyclerView
        list.add(new SemesterModelClass("sem4ffffffff", "SLT 111", "3"));
        list.add(new SemesterModelClass("sem4fff", "SLT 112", "4"));
        list.add(new SemesterModelClass("sem4gtgg", "SLT 113", "3"));
        list.add(new SemesterModelClass("sem4uku", "SLT 114", "4"));
    }
    return list;
 }
}

MyViewPager.java

package com.example.viewpager2;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;

public class MyViewPager extends FragmentStateAdapter {

    public MyViewPager(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return new CS_Semesters(position);
    }
    @Override
    public int getItemCount() {
        return 4;
    }
}

MyViewPager2.java

package com.example.viewpager2;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;

public class MyViewPager2 extends FragmentStateAdapter {

    public MyViewPager2(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return new STA_Semesters(position);
    }
    @Override
    public int getItemCount() {
        return 4;
    }
}

MyViewPager3.java

package com.example.viewpager2;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.Lifecycle;
import androidx.viewpager2.adapter.FragmentStateAdapter;

public class MyViewPager3 extends FragmentStateAdapter {

    public MyViewPager3(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
        super(fragmentManager, lifecycle);
    }
    @NonNull
    @Override
    public Fragment createFragment(int position) {
        return new SLT_Semesters(position);
    }
    @Override
    public int getItemCount() {
        return 4;
    }
}

SemesterFragment.java

package com.example.viewpager2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class SemesterFragment extends Fragment{
    TabLayout tabLayout;
    ViewPager2 viewPager2;
    MyViewPager adapter;
    CS_Semesters s;
    public SemesterFragment() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_semester, container, false);
        viewPager2 = (ViewPager2) view.findViewById(R.id.viewPager2);
        tabLayout = view.findViewById(R.id.tabLayout);

        adapter = new MyViewPager(getChildFragmentManager(),this.getLifecycle());

        viewPager2.setAdapter(adapter);
        new TabLayoutMediator(tabLayout, viewPager2,
                new TabLayoutMediator.TabConfigurationStrategy() {
                    @Override
                    public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                        tab.setText("Sem" + (position + 1));
                    }
                }).attach();
        return view;
    }


}

SemesterFragment2.java

package com.example.viewpager2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class SemesterFragment2 extends Fragment{
    TabLayout tabLayout;
    ViewPager2 viewPager2;
    MyViewPager2 adapter;

    public SemesterFragment2() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_semester, container, false);
        viewPager2 = (ViewPager2) view.findViewById(R.id.viewPager2);
        tabLayout = view.findViewById(R.id.tabLayout);

        adapter = new MyViewPager2(getChildFragmentManager(),this.getLifecycle());

        viewPager2.setAdapter(adapter);
        new TabLayoutMediator(tabLayout, viewPager2,
                new TabLayoutMediator.TabConfigurationStrategy() {
                    @Override
                    public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                        tab.setText("Sem" + (position + 1));
                    }
                }).attach();

        return view;
    }
}

SemesterFragment3.java

 package com.example.viewpager2;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

import com.google.android.material.tabs.TabLayout;
import com.google.android.material.tabs.TabLayoutMediator;

public class SemesterFragment3 extends Fragment{
    TabLayout tabLayout;
    ViewPager2 viewPager2;
    MyViewPager3 adapter;

    public SemesterFragment3() {

    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_semester, container, false);
        viewPager2 = (ViewPager2) view.findViewById(R.id.viewPager2);
        tabLayout = view.findViewById(R.id.tabLayout);

        adapter = new MyViewPager3(getChildFragmentManager(),this.getLifecycle());

        viewPager2.setAdapter(adapter);
        new TabLayoutMediator(tabLayout, viewPager2,
                new TabLayoutMediator.TabConfigurationStrategy() {
                    @Override
                    public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                        tab.setText("Sem" + (position + 1));
                    }
                }).attach();

        return view;
    }
}

0 个答案:

没有答案
相关问题