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
        }

     }
}