【发布时间】:2021-04-28 20:24:44
【问题描述】:
请问如何为这两个通用片段列表中的每一个创建方法??
作为构造函数不允许我创建多个 这些方法中。
- 我想创建一个类似于构造函数的方法Semesters (int position){ mData=getCsList(位置); }
当我运行程序时,我的构造函数被编译器调用,它完成了我想要的工作。我如何通过创建和使用执行相同工作的方法来实现这一点,因为我有很多片段列表,并且由于它的参数签名,承包商不允许我这样做,这就是为什么我想使用方法并始终保持相同的签名。谢谢
....... 编辑代码............
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;
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();
addComputerScienceSem();
adapter.notifyDataSetChanged();
return view;
}
private void addComputerScienceSem() {
adapter.addFrags(new Semesters().newInstance(0, 1));
adapter.addFrags(new Semesters().newInstance(0, 2));
adapter.addFrags(new Semesters().newInstance(0, 3));
adapter.addFrags(new Semesters().newInstance(0, 4));
}
}
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;
import java.util.ArrayList;
import java.util.List;
public class MyViewPager extends FragmentStateAdapter {
List<Fragment> fragmentList = new ArrayList<>();
public MyViewPager(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle) {
super(fragmentManager, lifecycle);
}
@NonNull
@Override
public Fragment createFragment(int position) {
return fragmentList.get(position);
}
@Override
public int getItemCount() {
return fragmentList.size();
}
public void addFrags(Fragment fragment) {
fragmentList.add(fragment);
}
}
学期.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 Semesters extends Fragment {
List mData;
RVFragment adapter;
RecyclerView recyclerView;
public Semesters() {
}
public static Semesters newInstance(int index, int position) {
Semesters fragment = new Semesters();
Bundle args = new Bundle();
args.putInt("index", index);
args.putInt("position", position);
fragment.setArguments(args);
return fragment;
}
@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);
if (getArguments().getInt("index", 0) == 0) {
mData = getCSList(getArguments().getInt("position", 0));
} else if (getArguments().getInt("index", 0) == 1) {
mData = getSTAList(getArguments().getInt("position", 0));
}
recyclerView.setAdapter(adapter);
return view;
}
private List getCSList(int position) {
List 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 if (position == 3) { //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;
}
private List getSTAList(int position) {
List list = new ArrayList<>();
if (position == 4) { //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 == 5) { //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 == 6) { //fragment three inside viewpager whenever item2 is clicked from the recyclerView
list.add(new SemesterModelClass("geo", "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 if (position == 7) { //fragment four inside viewpager whenever item2 is clicked from the recyclerView
list.add(new SemesterModelClass("log", "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;
}
}
........编辑了这个..............
部门RVAdapter.java
public void onClick(View v){
clickInterface.onItemClickListener(getLayoutPosition());
switch(getAdapterPosition()){
//loads department best on the position that user click
case 0: // it loads all departments in the school
Objects.requireNonNull(departmentFragment.getActivity()).getSupportFragmentManager().beginTransaction() //
.setCustomAnimations(R.anim.slide_in_left,R.anim.exit_to_right)
.replace(R.id.frameLayout,new SemesterFragment()).addToBackStack(null).commit();break;
case 1: // it loads all departments in the school
Objects.requireNonNull(departmentFragment.getActivity()).getSupportFragmentManager().beginTransaction() //
.setCustomAnimations(R.anim.slide_in_left,R.anim.exit_to_right)
.replace(R.id.frameLayout,new SemesterFragment()).addToBackStack(null).commit();break;
}
【问题讨论】:
-
格式很好,很好用
标签: android android-fragments android-recyclerview android-viewpager2