java - 如何从另一个 fragment 中对适配器进行排序

标签 java android android-recyclerview

我在 LightsFragment 上有 RecyclerView,我想从包含此 fragment 的 MainActivity 中对其进行排序。

这是我现在拥有的:

这就是对我的适配器进行排序的功能:

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);
    }
}

MainActivity - 处理 3 个按钮,其中一个按钮应该对适配器进行排序。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private Greetings mGreetings = new Greetings();
    private TextView mTVgreetings;
    private Button BTNmLights, BTNmGarage, BTNmSortBy;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        mTVgreetings = findViewById(R.id.TVgreetings);
        initFunctions();
    }

    public void showLightsFragment() {
        getSupportFragmentManager().beginTransaction().add(R.id.main_fragment_container, new LightsFragment())
                .commit();
    }

    public void initFunctions() {
        showLightsFragment();
        showGreetings();
    }

    public void showGreetings() {
        mTVgreetings.setText(mGreetings.getGreetings());
    }

    public void initView() {
        BTNmLights = findViewById(R.id.BTNlights);
        BTNmGarage = findViewById(R.id.BTNgarage);
        BTNmSortBy = findViewById(R.id.BTNsort);
        BTNmLights.setOnClickListener(this);
        BTNmGarage.setOnClickListener(this);
        BTNmSortBy.setOnClickListener(this);
    }


    @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:
                //TODO make drop down with sort light and garage.
                break;
        }
    }
}

我希望当我按下主要 Activity 的排序按钮时, LightsFragment 中的适配器将被排序。 我已经有一个排序适配器的功能。 只是不知道如何从 Main Activity 访问适配器。

最佳答案

将Fragment实例存储在Activity中并随时访问。

 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

关于java - 如何从另一个 fragment 中对适配器进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58746590/

相关文章:

android - 更改 RecyclerView 中 Item Click 上 TextView 的值?

java - 将 Maven 存储库添加到 settings.xml

java - 避免使用 ant 并通过 eclipse 自动构建。这可能吗?

android - 设置半透明时没有方向通知

android - Google Play 无法正确显示 android apk 支持的屏幕尺寸

android - 我想更新 firebase 数据库中的单个值

java - 翻译对象、停止和继续-处理

java - 如何创建实时应用程序

java - 使用覆盖模块扩展 ObjectGraph

android - 如何实现幻灯片以显示 recyclerview 中的操作?