如何从膨胀的布局中获取数据

时间:2014-09-15 18:30:01

标签: android android-layout

我是Android编程的新手所以我的问题可能很愚蠢。 我正在编写一个应用程序,用户为要交付的项目插入一些交付信息。 用户必须插入最多3个其他人的联系信息,以防他无法使用。

为此,用户单击一个按钮,该按钮将新的“行”膨胀为LinearLayout(垂直)。 行结构:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Spinner
        android:id="@+id/spinner1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:hint=" phone"
        android:inputType="phone" >

        <requestFocus />
    </EditText>

</LinearLayout>

我的问题是,当用户完成填充所有数据时,如果动态插入这些行,我该如何获取?我需要迭代LinearLayout中的每一行,还是有更好的approch?

提前致谢

2 个答案:

答案 0 :(得分:0)

你可能已经发布了更多的代码,但如果你想这样做,那么你必须为所有布局(三种不同的布局)制作id,然后是的,基本上找到他们的孩子EditTexts等。< / p>

我更喜欢通过制作可能出现在xml文件中的所有视图来解决这些问题(再次,如果你做对了),然后让它们中的一些看不见。您可以通过在xml文件中设置属性来实现。

android:visibility = "visible" // the view is shown
android:visibility = "invisible" // the view is hidden, but leaves blank space where 
android:visibility = "gone" // the view is litteraly gone

然后在您的Java代码中,您可以通过执行此操作来更改按钮单击时的可见性:

  View v;
    v.setVisible(View.GONE);// (or VISIBLE, or INVISIBLE)

答案 1 :(得分:0)

好的,所以我采用了Guardanis方法。 每次用户点击addButton时,我都会膨胀一行。 我将一个标记附加到按钮,指示已添加的行数(将行限制为3)。

BTW,因为我知道行的层次结构,在保存数据时, 我将迭代每一行并获取值getChildAt(INDEX OF SPINNER | EDITTEXT),而不是为每个元素附加一个id。

感谢所有人帮助我!!

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sign_in);
        Button addContactBtn = (Button)findViewById(R.id.sign_in_add_contact_button);
        addContactRow();
        addContactBtn.setTag(1);        // tag value indicate how many rows already defined


        addContactBtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                int totalRows = (Integer)v.getTag();
                if(totalRows < 3){
                    v.setTag(totalRows+1);
                    SignInActivity.this.addContactRow();

                }
                else{
                    // insensitive the button
                }

            }
        });

    }
    private void addContactRow(){

        LinearLayout layout = (LinearLayout)findViewById(R.id.sign_in_contact_list_layout);
        ViewGroup line = (ViewGroup)getLayoutInflater().inflate(R.layout.contact_details, null);

        Spinner spinner = (Spinner)line.getChildAt(0);
        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.sign_in_contact_type_array, android.R.layout.simple_spinner_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
        layout.addView(line);
    }