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