我正在设计一个包含大约25个问题的应用程序。
单击下一步按钮时如何更改问题。
所以这里的布局保持不变,除了问题(即TextView
可能会根据不同的问题而改变,但其他元素如Buttons
,背景不会改变。)因此,为不同的问题创建许多布局是耗时的
那么如何才能对这些问题使用相同的layout
。我应该创建这么多layouts and classes
来询问每个问题吗?
答案 0 :(得分:1)
您应该将问题存储在数据库中,或者存储在camera.capture_continuos
中,如果还有很多问题。
此处不需要多个课程,因为您只需更改问题文本,即import io
import time
import picamera
with picamera.PiCamera() as camera:
stream = io.BytesIO()
for foo in camera.capture_continuous(stream, format='jpeg'):
# YOURS: for frame in camera.capture_continuous(stream, format="bgr", use_video_port=True):
# Truncate the stream to the current position (in case
# prior iterations output a longer image)
stream.truncate()
stream.seek(0)
if process(stream):
break
。
然后你需要2个按钮 - 是和否,它们设置了static final String[]
,作为回报,questionView.setText(newQuestion);
的文本设置为OnClickListener
。< / p>
答案 1 :(得分:1)
创建一个扩展Fragment
的类。在onCreateView
内使用您的标准布局。
在此类中创建一个方法,如下所示:
public static FragmentName newInstance(int question)
{
FragmentName fragment = new FragmentName();
Bundle args = new Bundle();
args.putInt("QUESTION_ID", question);
fragment.setArguments(args);
return fragment;
}
现在在您的片段onCreateView
方法中添加一些代码来检查问题编号并根据需要编辑布局
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
/* ... Code to inflate your layout ... */
Bundle arguments = getArguments();
int question = arguments.getInt("QUESTION_ID", 0);
switch(question)
{
/* Add your code in here to modify the layout */
}
/*... ....*/
}
现在只需使用活动中的fragment manager
来处理转换,使用FragmentName.newInstance(question_number)
来实例化单个片段。
当然,如果只是以编程方式编辑活动内部的视图是不够的。
答案 2 :(得分:0)
假设您有包含项目的父布局(问题的父视图就像视图容器一样),并在使用此代码渗透您的问题布局后解析它。并替换“是”按钮OnClickListener
上的正常值。
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
// Access chile view by child.getElementById(id)
item.addView(child);
答案 3 :(得分:0)
单击“是”或“否”时,会根据情况更改textview内容;
yes_button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
tv_question.setText("This is a new question");.
}
});