Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我有一个;门票;需要在整个生命周期中记住哪些状态_Java_Android_Design Patterns_State - Fatal编程技术网

Java 我有一个;门票;需要在整个生命周期中记住哪些状态

Java 我有一个;门票;需要在整个生命周期中记住哪些状态,java,android,design-patterns,state,Java,Android,Design Patterns,State,我有一张“票”,它有名字和UUID等功能。。。 它有一个选择状态。活动中会记住所选内容。因此,返回到“回收器”视图意味着它“保持”选中状态(不,实际上不是……它是通过编码魔术重新选中的) 它有一个“新”和“现有”状态 它可以在生命周期中期从“新”过渡到“现有”。(票据的生命周期,而不是活动的生命周期) 我创建了一个状态引擎,但这似乎是错误的模式。 下面示例中的类的目的是解耦活动/组件 我知道下面的例子看起来不像一个状态引擎,这就是为什么我要问这个问题,一个实际的状态引擎似乎不适合我的需要 处理以

我有一张“票”,它有名字和UUID等功能。。。 它有一个选择状态。活动中会记住所选内容。因此,返回到“回收器”视图意味着它“保持”选中状态(不,实际上不是……它是通过编码魔术重新选中的) 它有一个“新”和“现有”状态 它可以在生命周期中期从“新”过渡到“现有”。(票据的生命周期,而不是活动的生命周期)

我创建了一个状态引擎,但这似乎是错误的模式。 下面示例中的类的目的是解耦活动/组件

我知道下面的例子看起来不像一个状态引擎,这就是为什么我要问这个问题,一个实际的状态引擎似乎不适合我的需要

处理以下示例的建议方法是什么:

public class TicketStateEngine {

    private static int mCurrentSelectedRecyclerViewPosition = -1;
    private static LinearLayoutManager mLinearLayoutManager;
    private static boolean mIsNewTicket;

    public static boolean isIsNewTicket() {
        return mIsNewTicket;
    }

    public static void setIsNewTicket(boolean isNewTicket) {
        mIsNewTicket  = isNewTicket;
    }

    public static void setLinearLayoutManager(LinearLayoutManager linearLayoutManager) {
        mLinearLayoutManager = linearLayoutManager;
    }

    public static int getCurrentSelectedRecyclerViewPosition() {
        return mCurrentSelectedRecyclerViewPosition;
    }

    public static void setCurrentSelectedRecyclerViewPosition(int currentSelectedRecyclerViewPosition) {
        mCurrentSelectedRecyclerViewPosition = currentSelectedRecyclerViewPosition;
    }

    public static void scrollToSelected() {
        try {
            mLinearLayoutManager.scrollToPositionWithOffset(mCurrentSelectedRecyclerViewPosition, 0);
        } catch (NullPointerException e) {
            Log.e("NullPointerException", "Make sure a Linear Layout manger is set for TicketStateEngine");
            throw e;
        }
    }
}

我不知道您是如何在活动之间共享票证的,但是如果您使用Room或其他数据库,我建议将
isNew
状态存储在您的票证模型中,这样状态将存储在数据库中,并且可以很容易地更新。谢谢@IvánEsparza,我正在使用带有Repo的MVVM(最终将以某种方式序列化)... 所以,是的,我能做到。选择状态是谜题的另一个关键部分,有什么想法吗?我刚刚读到关于在ViewModel中存储状态的内容,人们对此有什么看法。我的ViewModel是否应该为当前选定的RecyclerView项保存选定项索引?我不确定是否要存储索引,我会存储UUID,这样,如果列表在某个点发生更改,您可以使用相同的选定票证恢复选择状态。@IvánEsparza我已经考虑过了。目前,该指数提供了方便的位置访问。稍后,如果我需要一种更健壮的方法,我将实现对UUID的搜索,但这是当前迭代中不需要的额外工作。尽管如此:)