以编程方式创建视图

时间:2015-08-11 02:04:25

标签: android

我是一个新的Android开发人员,我决定创建一个简单的测试应用程序,它有6个editViews并计算输入的数字的平均值。

我希望找到如何在需要时以编程方式创建视图,而不是浪费资源来获得OnCreate的所有视图。

我一直在寻找,但一直无法找到如何实现它。如果有人可以提供帮助那就太棒了。

谢谢!

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    average = (TextView)findViewById(R.id.average);
    edit_message = (EditText)findViewById(R.id.edit_message);
    editText = (EditText)findViewById(R.id.editText);
    editText2 = (EditText)findViewById(R.id.editText2);
    editText3 = (EditText)findViewById(R.id.editText3);
    editText4 = (EditText)findViewById(R.id.editText4);
    editText5 = (EditText)findViewById(R.id.editText5);

    Button button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            s1  = edit_message.getText().toString();
            s2  = editText.getText().toString();
            s3  = editText2.getText().toString();
            s4  = editText3.getText().toString();
            s5  = editText4.getText().toString();
            s6  = editText5.getText().toString();
            if(!s1.isEmpty()) {
                n1 = Integer.parseInt(s1);
                counter++;
            }
            if(!s2.isEmpty()) {
                n2 = Integer.parseInt(s2);
                counter++;
            }
            if(!s3.isEmpty()) {
                n3 = Integer.parseInt(s3);
                counter++;
            }
            if(!s4.isEmpty()) {
                n4 = Integer.parseInt(s4);
                counter++;
            }
            if(!s5.isEmpty()) {
                n5 = Integer.parseInt(s5);
                counter++;
            }
            if(!s6.isEmpty()) {
                n6 = Integer.parseInt(s6);
                counter++;
            }
            if(counter>0) {
                s1 = String.valueOf((n1 + n2 + n3 + n4 + n5 + n6) / counter);
                average.setText(s1);
            }
            else {
                average.setText("0");
            }

            counter = 0;
        }
    });
}

2 个答案:

答案 0 :(得分:0)

如果没有更多细节,我至少会给你一个开始的地方。您可以以编程方式实例化TextView,然后将它们添加到您的布局中。

TextView tv = new TextView(context);
parent.addView(tv);

context应该是您的ActivityFragment,此文本视图将与您分开。 parent应该是XML布局中的ViewGroup,可以有多个子项,例如纵向LinearLayout。希望这足以引导您更好地进行Google搜索。

修改

LinearLayout - 不是列表布局,脑屁。

答案 1 :(得分:0)

这是一个仅供参考的样本:

布局文件:

<LinearLayout  xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.test.MainActivity" >

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" >

        <LinearLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical" />
    </ScrollView>

    <Button
        android:id="@+id/add"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="add" />

    <Button
        android:id="@+id/del"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="del" />

    <Button
        android:id="@+id/sum"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="sum" />

</LinearLayout>

这是活动:     package com.example.test;

import android.app.Activity;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;

public class MainActivity extends Activity {

    LinearLayout container;
    Button add;
    Button del;
    Button sum;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        container = (LinearLayout) findViewById(R.id.container);

        add = (Button) findViewById(R.id.add);
        del = (Button) findViewById(R.id.del);
        sum = (Button) findViewById(R.id.sum);

        add.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                EditText edit = new EditText(MainActivity.this);
                LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
                edit.setLayoutParams(params);
                edit.setInputType(InputType.TYPE_CLASS_NUMBER);
                container.addView(edit);
            }
        });

        del.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int count = container.getChildCount();
                if (count > 0)
                    container.removeViewAt(count - 1);
            }
        });

        sum.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                int count = container.getChildCount();
                int sum = 0;
                for (int i = 0; i < count; i++) {
                    EditText edit = (EditText) container.getChildAt(i);
                    String numStr = edit.getText().toString();
                    if (numStr == null || !(numStr.length() > 0)) {
                        sum += 0;
                    } else {
                        sum += Integer.parseInt(numStr);
                    }
                }

                Log.i("Test", "sum = " + sum + " avg = " + (sum * 1.0f / count));
            }
        });
    }
}