我是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?
提前致谢
答案 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);
}