如何解析findContentByID()在setContentView()之后返回Null

时间:2019-01-09 04:23:52

标签: android android-dialog

我在布局文件Button中有一个add_site_bottom_sheet.xml元素,其ID为@+id/add_site_sheet_add_site_button

在我的SitesActivity.java中,在onCreate()中,我呼叫buildAddSiteSheet()

在这种方法中,我创建了BottomSheetDialog的实例,然后调用了setContentView(R.layout.add_site_bottom_sheet)

setContentView(...)之后,我为Button addSiteButton分配了findViewById(R.id.add_site_sheet_add_site_button),但这将返回null

我看过多个地方,目前找不到任何答案。

我想知道你们可爱的人是否会对我的代码进行监视,以查看我是否丢失了任何东西。

SitesActivity.java


    public class SitesActivity extends AppCompatActivity {

        ITrapLossCalculator calc;
        ICustomer customer;
        Controller controller;

        RecyclerView recyclerView;
        SitesRecyclerViewAdapter recyclerAdapter;
        RecyclerView.LayoutManager recyclerManager;
        FloatingActionButton fab;
        BottomSheetDialog addSiteSheet;

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

            buildAppBar();           //method is omitted from this class

            Intent intent = getIntent();

            controller = intent.getParcelableExtra(CustomersActivity.EXTRA_CONTROLLER);
            calc = controller.getLossCalculator();
            customer = intent.getParcelableExtra(EXTRA_CUSTOMER);

            setTitle(customer.getName());

            buildRecyclerView();    //method is omitted from this class
            buildFAB();             //method is omitted from this class
            buildAddSiteSheet(); 

        }

        private void buildAddSiteSheet(){
            Button addSiteButton;
            addSiteSheet = new BottomSheetDialog(this);
            addSiteSheet.setContentView(R.layout.add_site_bottom_sheet);

            // addSiteButton below is null.
            addSiteButton = findViewById(R.id.add_site_sheet_add_site_button);

            addSiteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    //TODO - Callback to add site to model needs to be implemented.
                }
            });
        }

    }

add_site_bottom_sheet.xml


    <?xml version="1.0" encoding="utf-8"?>

    <GridLayout
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/BoilerAndValve"
        android:background="@color/colorBandVAccent"
        android:columnCount="2"
        android:rowCount="4">

            <EditText
                android:id="@+id/add_site_sheet_address_line_1_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:layout_column="0"
                android:layout_row="0"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_address_line_1_hint"
                android:autofillHints="no"
                tools:targetApi="o" />

            <EditText
                android:id="@+id/add_site_sheet_address_line_2_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:layout_column="0"
                android:layout_row="1"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_address_line_2_hint"
                android:autofillHints="no"
                tools:targetApi="o"/>

            <EditText
                android:id="@+id/add_site_sheet_address_line_3_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:layout_column="0"
                android:layout_row="2"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_address_line_3_hint"
                android:autofillHints="no"
                tools:targetApi="o"/>

            <EditText
                android:id="@+id/add_site_sheet_postcode_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:layout_column="0"
                android:layout_row="3"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_postcode_hint"
                android:autofillHints="no"
                tools:targetApi="o"/>

            <EditText
                android:id="@+id/add_site_sheet_name_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="text"
                android:layout_column="1"
                android:layout_row="0"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_name_hint"
                android:autofillHints="no"
                tools:targetApi="o"/>


            <EditText
                android:id="@+id/add_site_sheet_phone_entry"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="phone"
                android:layout_column="1"
                android:layout_row="1"
                android:layout_columnWeight="1"
                android:hint="@string/add_new_site_sheet_phone_hint"
                android:autofillHints="no"
                tools:targetApi="o"/>

            <Button
                android:id="@+id/add_site_sheet_add_site_button"
                android:layout_column="1"
                android:layout_row="3"
                android:layout_columnWeight="1"
                android:text="@string/add_site_button_text"/>


        </GridLayout>

我忽略了SitesActivity.java中的某些方法,这些方法与保持SO可读性完全无关,但是如果有人认为那里可能有任何方法,我会很乐意进行编辑以包括其他方法。

我还想补充一点,我已经尝试从add_site_bottom_sheet.xml获取所有其他元素,但是findViewById(...)也会为这些元素返回null。

我没有任何重复的布局,并且我也没有任何其他尺寸的布局,所以我很茫然!

1 个答案:

答案 0 :(得分:0)

请使用

addSiteButton =(Button) addSiteSheet.findViewById(R.id.add_site_sheet_add_site_button);