android - 在一项活动中加载单个片段两次,其中包含来自本地 json 文件的 2 个问题
问题描述
我有一个用于调查问题的本地 json,并且我创建了一个片段和活动,我想在其上显示带有活动的下一个和上一个按钮的片段。我的问题是我想同时用两个不同的问题显示相同的片段两次,并且还保留下一个和上一个的状态。例如。我有 15 个问题的列表,我想在同一活动中显示 2 个带有 2 个相同片段的问题,然后单击下一步,我想保存该状态,并再次希望在相同的活动中仅使用相同的片段加载第三个问题,然后单击上一个我想要带有 1 个和 2 个问题的 2 个片段我很困惑,如果有人可以提供帮助,我不知道该怎么做。
这是我进行一些调查的 json。
{
"questions": [
{
"q_id": "1",
"que": "how many working vehicles do you have?",
"q_type": "type_number",
"ans_id": "",
"ans": "",
"Option": [
{
"op_id": "1",
"op_val": "1"
},
{
"op_id": "2",
"op_val": "2"
}
]
},
{
"q_id": "2",
"que": "how many peoples are there in your house?",
"q_type": "type_number",
"ans_id": "",
"ans": "",
"Option": [
{
"op_id": "1",
"op_val": "1"
},
{
"op_id": "2",
"op_val": "2"
}
]
}
]
}
这是我正在做的代码。我只是在一个布局中添加了所有问题我真的不知道如何做我所要求的问题以及如何保留下一个和上一个按钮的状态,我听说过单例和其他东西,但我不知道如何实现我想。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
baseFragment = new BaseFragment();
questions = Questions.AddAllQue(this);
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
linearLayout.setId(View.generateViewId());
for(int i=0;i<questions.size();i++ ){
Bundle bundle = new Bundle();
bundle.putParcelable("question",questions.get(i));
getSupportFragmentManager()
.beginTransaction()
.add(linearLayout,basefragment)
.commit();
}
flContainer.addView(linearLayout);
}
我想要像这个红色标记的东西是独立但相同的基本片段。
并单击下一个只有一个问题的相同基本片段,然后像此图像一样再次单击上一个,我的意思是相同的状态。
解决方案
虽然我认为随着您的进步,您会有几个更详细的问题,但听起来您需要一些总体方向才能真正开始。
首先,我建议您不要对显示的两个问题中的每一个都使用相同的片段,而是要使用同一片段类的两个单独的实例。例如,我认为你会想要这样的东西:
questionOneFragment = new BaseFragment();
questionTwoFragment = new BaseFragment();
看起来你有一个问题列表,你只想一次显示两个,所以我认为你需要维护的唯一状态是应该显示哪个问题编号数据questionOneFragment
(questionTwoFragment
应该在列表中显示问题的数据在问题二之后)。
为此,您只需要一个整数firstDisplayedQuestion
,您可以根据单击prev
andnext
按钮来递增和递减。您需要管理该变量的边界,使其不会低于 0 或低于列表中最后一项的 1。
在您的BaseFragment
课程中,您需要有设置您希望显示的 UI 元素的方法。然后,当单击prev
或next
按钮时,您会firstDisplayedQuestion
相应地更新。然后,您还可以在对应的列表中获取问题的数据,并在使用该数据firstDisplayedQuestion
时调用显示设置方法。questionOneFragment
接下来,您在对应的列表中获取问题的数据,firstDisplayedQuestion + 1
并使用该数据设置显示元素questionTwoFragment
推荐阅读
- ios - 将应用提交到 AppStore 时捆绑无效
- java - 使用 Guice 在方法内创建对象的正确方法是什么
- java - Apache HttpClient 连接配置
- reactjs - 尝试使用 php artisan 预设反应时遇到问题
- python - 使用带有请求的 RestApi 会导致 SSL 模块不可用错误
- kernel - 在 Yocto 上将驱动程序从静态移植到动态
- bash - 通过 Bash 脚本远程触发 Jenkins 作业后,我应该何时检索作业 ID?
- apache-spark - 使用 maxRecordsPerFile 将 DF 写入文件时的性能问题
- java - JPA:使用单向@OneToMany 时,子实体中的引用列为空
- java - JdbcTemplate.excute -spring- 不适用于 plsql