【问题标题】:How to get layout object如何获取布局对象
【发布时间】:2018-07-17 04:47:21
【问题描述】:

我正在关注this question 的公认答案:

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 ) );

你如何得到myLayout,它实际上代表什么?在我的应用程序中,我在 activitymain.xml 中定义了 linear_layout,但似乎无法在 MainActivity.java 中得到它(我尝试使用 R 但它不起作用)。我是 Android 开发的新手,真的可以使用一些高级指导。

【问题讨论】:

    标签: android android-studio android-linearlayout


    【解决方案1】:

    让线性布局成为你 xml 的根:

    <LinearLayout android:id="@+id/my_layout" >
       //your views goes here
    </LinearLayout>
    

    然后在您的 Activity 中,一旦您的布局像这样膨胀,您就必须初始化视图

    LinearLayout myLayout = (LinearLayout) findViewById(R.id.my_layout);
    

    希望这会有所帮助。

    【讨论】:

    • 感谢工作。为什么它会这样工作?如果它已经在 XML 中,为什么必须在 Activity 中初始化它?
    • @northerner 您没有在活动中初始化布局。初始化看起来像这样 LinearLayout mLinearLayout = new LinearLayout(); 方法 findViewById() 只是给出了对已经初始化的 View 的引用,因为你用 XML 编写了它。
    【解决方案2】:

    您需要在layout.xml 文件中使用myLayout 作为您的根布局

    myLayout 可能是 FrameLayoutLinearLayoutRelativeLayoutConstraintLayout强>布局

    示例代码

    <?xml version="1.0" encoding="utf-8"?>
    <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:id="@+id/myLayout"
        android:orientation="vertical">
    
            <!-- add your view here-->
    
    </LinearLayout>
    

    现在在你的活动中做findViewById

    public class MyActivity extends AppCompatActivity {
    
        LinearLayout myLayout;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
    
            myLayout = findViewById(R.id.myLayout);
        }
    
    
    }
    

    【讨论】:

    • 我可以知道否决票的充分理由,以便我可以改进我的答案
    【解决方案3】:

    您可以尝试下面的代码以在 Java 代码中获取您的 LinearLayout 的引用。

    LinearLayout myLayout=(LinearLayout) findViewById(R.id.your_linear_layout_id)

    【讨论】:

      【解决方案4】:

      假设您的 activtymain.xml 看起来像这样

      <?xml version="1.0" encoding="utf-8"?>
      <SomeLayout
       android:id="@+id/some_id"
      ...>
       <EditText
      ...
      />
      
      <EditText
      ...
      />
      .
      .
      .
      </SomeLayout>
      

      mLayout 您所指的是您所有编辑文本的父级。它可能不是你的布局的根,但如果你想获得它的 Java 实例,你需要给它一个 id。并使用@Nilesh Rathod 给出的代码获取实例。要记住的另一件事是仅在setContentView(R.layout.activitymain); 之后调用方法findViewById(R.id.my_layout);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多