如何在android中为不同的动作使用相同的布局?

时间:2015-04-29 09:53:21

标签: android android-layout android-xml

我正在设计一个包含大约25个问题的应用程序。

单击下一步按钮时如何更改问题。 所以这里的布局保持不变,除了问题(即TextView可能会根据不同的问题而改变,但其他元素如Buttons,背景不会改变。)因此,为不同的问题创建许多布局是耗时的

那么如何才能对这些问题使用相同的layout。我应该创建这么多layouts and classes来询问每个问题吗?

4 个答案:

答案 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");.

        } 

    });