在 MainActivity 类中扩展类是如何工作的?

问题描述

我正在我的 MainActivity 中创建一个带有 RecyclerView 的“警报”列表。我在 MainActivity 类中使​​用了以下代码,以便通过滑动删除每个警报:

Alarm deletedAlarm = null;

itemtouchhelper.SimpleCallback alarmCallback =
        new itemtouchhelper.SimpleCallback(0,itemtouchhelper.RIGHT) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder viewHolder,@NonNull RecyclerView.ViewHolder target) {
                return false;
            }

            @Override
            public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder,int direction) {
                final int position = viewHolder.getAdapterPosition();
                deletedAlarm = alarmlist.get(position);
                alarmlist.remove(position);
                alarmRecyclerViewAdapter.notifyDataSetChanged();
                Snackbar.make(alarmRecyclerView,"Alarm deleted",Snackbar.LENGTH_LONG)
                        .setAction("Undo",new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                alarmlist.add(position,deletedAlarm);
                                alarmRecyclerViewAdapter.notifyDataSetChanged();
                                alarmRecyclerView.smoothScrollToPosition(position);
                            }
                        }).show();
            }
        };

然后,我尝试定义一个新类并在MainActivity中使用它,而不是以前的方式,因为我认为这样代码更容易理解,所以我这样做了

public class AlarmCallback extends itemtouchhelper.SimpleCallback {

    ArrayList<Alarm> alarmlist;
    RecyclerView alarmRecyclerView;
    AlarmRecyclerViewAdapter alarmRecyclerViewAdapter;
    Alarm deletedAlarm;

    public AlarmCallback(int dragDirs,int swipeDirs,ArrayList<Alarm> alarmlist,RecyclerView alarmRecyclerView,AlarmRecyclerViewAdapter alarmRecyclerViewAdapter) {
        super(dragDirs,swipeDirs);
        this.alarmlist = alarmlist;
        this.alarmRecyclerView = alarmRecyclerView;
        this.alarmRecyclerViewAdapter = alarmRecyclerViewAdapter;
        deletedAlarm = null;
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView,@NonNull RecyclerView.ViewHolder target) {
        return false;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder,int direction) {
        final int position = viewHolder.getAdapterPosition();

        deletedAlarm = alarmlist.get(position);

        alarmlist.remove(position);

        alarmRecyclerViewAdapter.notifyDataSetChanged();

        Snackbar.make(alarmRecyclerView,Snackbar.LENGTH_LONG)
                .setAction("Undo",new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        alarmlist.add(position,deletedAlarm);
                        alarmRecyclerViewAdapter.notifyDataSetChanged();
                        alarmRecyclerView.smoothScrollToPosition(position);
                    }
                }).show();
    }
}

在我的 MainActivity

alarmCallback = new AlarmCallback(0,itemtouchhelper.RIGHT,alarmlist,alarmRecyclerView,alarmRecyclerViewAdapter);

两个选项都有效,但是,使用最后一个选项我必须在创建我的整个 alarmlist 和 alarmRecyclerView 后初始化 alarmCallback,并且我认为 alarmCallback 的 alarmlist 接收是固定的,直到再次运行活动。相反,在第一个选项中,我假设在滑动时收到 alarmCallback 使用的 alarmlist 和 alarmRecyclerView。谁能解释一下这是如何工作的? Java 源代码会很棒。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)