Java 如何从另一个片段中对适配器进行排序
我在Java 如何从另一个片段中对适配器进行排序,java,android,android-recyclerview,Java,Android,Android Recyclerview,我在LightsFragment上有RecyclerView,我想从包含此片段的主活动中对其进行排序 以下是我现在拥有的: 这就是排序我的适配器的功能: Collections.sort(lights); lightsAdapter.updateData(lights); LightsFragment-处理应排序的适配器 public class LightsFragment extends Fragment implements LightsPresenter, View.OnClickLi
LightsFragment
上有RecyclerView
,我想从包含此片段的主活动中对其进行排序
以下是我现在拥有的:
这就是排序我的适配器的功能:
Collections.sort(lights);
lightsAdapter.updateData(lights);
LightsFragment
-处理应排序的适配器
public class LightsFragment extends Fragment implements LightsPresenter, View.OnClickListener {
private RecyclerView RVLights;
private ArrayList<Light> lights = new ArrayList<>();
private Light light;
private LightsAdapter lightsAdapter;
private LightsView presenter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_lights, container, false);
presenter = new LightsView(lights, light, this);
RVLights = view.findViewById(R.id.RVLights);
presenter.loadData();
return view;
}
@Override
public void setAdapter() {
lightsAdapter = new LightsAdapter(getActivity(), lights);
RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 3);
RVLights.setLayoutManager(layoutManager);
RVLights.setAdapter(lightsAdapter);
}
}
当我按下主活动上的排序按钮时,
将对LightsFragment中的适配器进行排序。
我已经有了一个排序适配器的函数。
只是不知道如何从主活动访问适配器。将片段实例存储在活动中,并随时访问它
private LightsFragment lightsFragment= new LightsFragment();
public void showLightsFragment() {
getSupportFragmentManager()
.beginTransaction().add(R.id.main_fragment_container, this.lightFragment)
.commit();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.BTNlights:
//TODO open lights fragment...
break;
case R.id.BTNgarage:
//TODO open garage fragment...
break;
case R.id.BTNsort:
this.lightFragment.sortLights()
//TODO make drop down with sort light and garage.
break;
}
}
在LightFragment中,您应该有一个方法来查找RecylerView,并获取其适配器以更新列表和
notifyDataSetChanged
首先,为片段中的LightsAdapter创建一个getter方法。
之后,在mainActivity的帮助下获取片段
Fragment yourFragment=getSupportFragmentManager().findFragmentById(R.id.main_fragment_container);
稍后,检查片段是否为您的片段:
if(yourFragment instanceOf LightsFragment)
{
yourFragment.getAdapter();
}
您可以使用
界面
完成此操作
创建一个像
public interface UpdateFrag {
void sortAdapter(int sortType);
}
在您的活动中,请执行以下操作
UpdateFrag updatFrag ;// add this line
public void showLightsFragment() {
Fragment lightsFragment = new LightsFragment();
updatFrag = lightsFragment; // here you initialize updatFrag
fragment.getSupportFragmentManager().beginTransaction().add(R.id.main_fragment_container, lightsFragment)
.commit();
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.BTNlights:
break;
case R.id.BTNgarage:
//TODO open garage fragment...
break;
case R.id.BTNsort:
// here you should call sortAdapter method.
updatFrag.sortAdapter(1) // suppose 1 for light and 2 for garage
break;
}
}
现在,在LightsFragment
中实现接口
public class LightsFragment extends Fragment implements LightsPresenter, View.OnClickListener, UpdateFrag {
// ....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ....
}
@Override
public void setAdapter() {
// ....
}
@Override
public void sortAdapter(int sortType) {
if (sortType == 1){
// here you can sort your adapter according to light
}else{
// here you can sort your adapter according to garage
}
}
}
您是否尝试使用ViewModel?
public class LightsFragment extends Fragment implements LightsPresenter, View.OnClickListener, UpdateFrag {
// ....
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// ....
}
@Override
public void setAdapter() {
// ....
}
@Override
public void sortAdapter(int sortType) {
if (sortType == 1){
// here you can sort your adapter according to light
}else{
// here you can sort your adapter according to garage
}
}
}