任何人都可以帮我编写一个方法来获取视图中的所有EditTexts吗?我想实现htafoya在这里发布的解决方案: 如何在EditText外单击后隐藏软键盘?
不幸的是,getFields()方法丢失了,htafoya没有回答我们分享他的getFields()方法的请求.
kas*_*rch 37
编辑
MByD向我指出了一个错误,因此我的回答几乎与黑带相同.我编辑了我的正确方法.
您可以执行for-each循环,然后检查每个视图是否为EditText类型:
ArrayList<EditText> myEditTextList = new ArrayList<EditText>();
for( int i = 0; i < myLayout.getChildCount(); i++ )
if( myLayout.getChildAt( i ) instanceof EditText )
myEditTextList.add( (EditText) myLayout.getChildAt( i ) );
Run Code Online (Sandbox Code Playgroud)
你也可以,而不是有一个EditTexts列表,有一个ID列表,然后只需将子ID添加到列表中: myIdList.add( child.getId() );
要访问您的布局,您需要获取它的参考.这意味着您需要在XML中为您的布局提供ID:
<LinearLayout android:id="@+id/myLinearLayout" >
//Here is where your EditTexts would be declared
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
然后,当您在活动中夸大布局时,您只需确保保存对它的引用:
LinearLayout myLinearLayout;
public void onCreate( Bundle savedInstanceState ) {
super( savedInstanceState );
setContentView( R.layout.myLayoutWithEditTexts );
...
myLinearLayout = (LinearLayout) findViewById( R.id.myLinearLayout );
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以在活动中引用您的EditTexts持有者.
Jar*_*ith 10
这是我写的一个方法,以递归方式检查ViewGroup的所有EditText子项,方便我需要做的长注册表单,可能更易于维护.
private EditText traverseEditTexts(ViewGroup v)
{
EditText invalid = null;
for (int i = 0; i < v.getChildCount(); i++)
{
Object child = v.getChildAt(i);
if (child instanceof EditText)
{
EditText e = (EditText)child;
if(e.getText().length() == 0) // Whatever logic here to determine if valid.
{
return e; // Stops at first invalid one. But you could add this to a list.
}
}
else if(child instanceof ViewGroup)
{
invalid = traverseEditTexts((ViewGroup)child); // Recursive call.
if(invalid != null)
{
break;
}
}
}
return invalid;
}
private boolean validateFields()
{
EditText emptyText = traverseEditTexts(mainLayout);
if(emptyText != null)
{
Toast.makeText(this, "This field cannot be empty.", Toast.LENGTH_SHORT).show();
emptyText.requestFocus(); // Scrolls view to this field.
}
return emptyText == null;
}
Run Code Online (Sandbox Code Playgroud)
您可以通过调用来执行此操作View#getFocusables,这将返回视图中所有可聚焦视图的arraylist.
然后,您可以检查它们是否为EditTexts,使用(instanceof)或对所有这些进行操作.
| 归档时间: |
|
| 查看次数: |
28071 次 |
| 最近记录: |