我的应用程序上有一个SQLite表,它有一组问题 . 用户可以进行此测试的活动最初加载第一个问题,然后每次按下它时,它会设置问题的文本并将textView应答到SQLite表的下一行 .
问题是,如果我希望用户能够点击答案并转到下一个问题,那么如果他们按下上一个问题按钮,我希望该答案保持突出显示/检查 - 这意味着我认为最好的方法是将所有问题加载到活动中的单独布局中,并使活动一次显示一个 .
是否有可能每次循环并创建一个布局,还是会杀死内存?
出于多种原因,您不希望这样做 . 对于一个 Activity ,多个 layouts 很少是个好主意 . 我不知道您的 layout 是如何看的,但您可以动态加载 parent and child views ,如果您不知道每次问题的数量,这可能是您想要做的 .
Activity
layouts
layout
parent and child views
您可以使用类似的东西创建 View
View
TextView question = new TextView(this);
然后使用 addView() 将其添加到 layout
addView()
您可以在一个单独的文件中使用 LinearLayout 并且inflate每次需要一个新问题并相应地在其中设置 Views .
LinearLayout
Views
另一个选项,如果你知道你的 layout 中应该有多少 Views 将在xml中创建它们并在xml中使用 visibility 属性 android:visibility="invisible" 然后在它们单击 Button 时将其更改为 visible
visibility
android:visibility="invisible"
Button
visible
textView.setVisibility(View.VISIBLE);
如果不确切知道你有什么,很难给出很多例子,但我建议你研究这两个选项中的一个
如果每个问题/答案都有大的 layout 或希望它们可重复使用,您可以考虑的另一个选项是为每个问题创建单独的文件,并使用 <include> 标记将每个问题包含在主 layout 中 . 你也可以使用 visibility 属性这样做,并有单独的文件 . 您只是想尝试避免多次调用 setContentView() ,因为这会将您的所有 Views 设置为默认值,并且它会变得混乱导致更多问题 .
<include>
setContentView()
您应该在sqlite中存储答案,并在再次加载该屏幕时设置值,而不是预先加载所有布局 . 所以流程将会:
onCreate - >设置内容视图
onResume - >检查sqlite查询问题是否存在答案 . 如果存在答案,请设置值 .
onPause - >如果设置了答案,则存储到sqlite
实际上,你可能想在他们点击下一个按钮时保存..但是如果你正在打开一个新活动,那么它将依次调用onPause .
2 回答
出于多种原因,您不希望这样做 . 对于一个
Activity
,多个layouts
很少是个好主意 . 我不知道您的layout
是如何看的,但您可以动态加载parent and child views
,如果您不知道每次问题的数量,这可能是您想要做的 .您可以使用类似的东西创建
View
然后使用
addView()
将其添加到layout
您可以在一个单独的文件中使用
LinearLayout
并且inflate每次需要一个新问题并相应地在其中设置Views
.另一个选项,如果你知道你的
layout
中应该有多少Views
将在xml中创建它们并在xml中使用visibility
属性android:visibility="invisible"
然后在它们单击Button
时将其更改为visible
如果不确切知道你有什么,很难给出很多例子,但我建议你研究这两个选项中的一个
如果每个问题/答案都有大的
layout
或希望它们可重复使用,您可以考虑的另一个选项是为每个问题创建单独的文件,并使用<include>
标记将每个问题包含在主layout
中 . 你也可以使用visibility
属性这样做,并有单独的文件 . 您只是想尝试避免多次调用setContentView()
,因为这会将您的所有Views
设置为默认值,并且它会变得混乱导致更多问题 .您应该在sqlite中存储答案,并在再次加载该屏幕时设置值,而不是预先加载所有布局 . 所以流程将会:
onCreate - >设置内容视图
onResume - >检查sqlite查询问题是否存在答案 . 如果存在答案,请设置值 .
onPause - >如果设置了答案,则存储到sqlite
实际上,你可能想在他们点击下一个按钮时保存..但是如果你正在打开一个新活动,那么它将依次调用onPause .