Android LinearLayout findViewById获取null

Android LinearLayout findViewById获取null,android,null,android-linearlayout,findviewbyid,Android,Null,Android Linearlayout,Findviewbyid,我这里有一个问题。我需要更改navigationView中布局的背景。我就是这么做的 protected void onCreate(Bundle savedInstanceState) { try { ConnectivityManager con = (ConnectivityManager) getSystemService(context.CONNECTIVITY_SERVICE); NetworkInfo net = con.getActive

我这里有一个问题。我需要更改navigationView中布局的背景。我就是这么做的

protected void onCreate(Bundle savedInstanceState) {

    try {
        ConnectivityManager con = (ConnectivityManager) getSystemService(context.CONNECTIVITY_SERVICE);
        NetworkInfo net = con.getActiveNetworkInfo();
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_settings);
        themeInfo = getSharedPreferences("THEMECONFIG",0);
        themeSetting = themeInfo.getString("theme","Základná");



        if (net != null && net.isConnected()) {
            if (isOnline()) {
                //setContentView(R.id.nav_header_logo);
                navHeaderLogo = (LinearLayout)findViewById(R.id.nav_header_logo);

                Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
                        this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
                drawer.setDrawerListener(toggle);
                toggle.syncState();


                navigationView.setNavigationItemSelectedListener(this);


            } else {
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("Hups, niečo je zle :(")
                        .setMessage("Internet nie je dostupný")
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                System.exit(0);
                            }
                        })
                        .setIcon(android.R.drawable.ic_dialog_alert)
                        .show();

            }

        } else {

            AlertDialog.Builder builder = new AlertDialog.Builder(this);
            builder.setTitle("Hups, niečo je zle :(")
                    .setMessage("Chýba pripojenie k internetu. Zapnite prosím dáta alebo Wi-Fi a spustite aplikáciu znova.")
                    .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int which) {
                            System.exit(0);
                        }
                    })
                    .setIcon(android.R.drawable.ic_dialog_alert)
                    .show();
        }


    } catch (Exception e) {
        Log.e("chyba", e.getMessage());
    }

    swt = (SwitchCompat)findViewById(R.id.lokalizationSwitch);

    if(ContextCompat.checkSelfPermission(Settings_activity.this,
            android.Manifest.permission.ACCESS_FINE_LOCATION)
            != PackageManager.PERMISSION_GRANTED)
    {
        swt.setChecked(false);
        checker = false;
    }
    else
    {
        swt.setChecked(true);
        checker = true;
    }
    swt.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

            MainActivity.checker = false;
            MainActivity2.checker2 = false;
            MainActivity3.checker3 = false;


            if(isChecked == true)
            {
                if (ContextCompat.checkSelfPermission(Settings_activity.this,
                        android.Manifest.permission.ACCESS_FINE_LOCATION)
                        != PackageManager.PERMISSION_GRANTED) {

                    ActivityCompat.requestPermissions(Settings_activity.this,
                            new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
                            permissionCheck);
                    checker = true;


                    }
            }
            else if (isChecked == false && checker == true)
            {
                Intent intent = new Intent();
                intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                Uri uri = Uri.fromParts("package", getPackageName(), null);
                intent.setData(uri);
                startActivity(intent);

                checker = false;
            }

        }

    });
    this.isCreated = true;
    themes = (Spinner) findViewById(R.id.comboBoxTheme);
    themeSetting = themeInfo.getString("theme","Základná");
    if(themeSetting.equals("Základná"))
    {
        themes.setSelection(0);
        setTheme(R.style.AppTheme);
        checker2 = false;
    }
    if(themeSetting.equals("Matrix"))
    {
        themes.setSelection(1);
        setTheme(R.style.AppThemeMatrixDivider);
        checker2 = false;
    }
    if(themeSetting.equals("Gamers"))
    {
        themes.setSelection(2);
        setTheme(R.style.AppThemeGamersDivider);
        checker2 = false;
    }
    themes.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                   int arg2, long arg3) {
            int index = arg0.getSelectedItemPosition();
            if(!themeSetting.equals(themes.getItemAtPosition(index).toString()))
            {
                changeTheme(themes.getItemAtPosition(index).toString());
                checker2 = false;

            }



        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            checker2 = true;
        }

    });

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    Button sett = (Button)findViewById(R.id.button_settings);
    TextView text = (TextView)findViewById(R.id.textview);
    navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setItemIconTintList(ContextCompat.getColorStateList(Settings_activity.this, themeInfo.getInt("setItemIconTintList",R.drawable.menu_text_color_normal) ));
    navigationView.setItemTextColor(ContextCompat.getColorStateList(Settings_activity.this, themeInfo.getInt("setItemTextColor",R.drawable.menu_text_color_normal) ));
    navigationView.setBackgroundDrawable(ContextCompat.getDrawable(Settings_activity.this, themeInfo.getInt("setBackgroundDrawable",R.drawable.border_top_bottom_normal) ));
    sett.setTextColor(ContextCompat.getColorStateList(Settings_activity.this, themeInfo.getInt("settSetTextColor",R.color.colorWhite) ));
    text.setTextColor(ContextCompat.getColorStateList(Settings_activity.this, themeInfo.getInt("textSetTextColor",R.color.colorDefault) ));
    toolbar.setBackground(ContextCompat.getDrawable(Settings_activity.this, themeInfo.getInt("toolbarSetBackground",R.color.colorPrimary) ));
    toolbar.getNavigationIcon().setColorFilter(getResources().getColor(themeInfo.getInt("toolbarGetNavigationIcon()",R.color.colorWhite)), PorterDuff.Mode.SRC_ATOP);



}

我知道这是不可能的,因为背景的改变应该在别处进行。但你们有什么解决办法吗?因为我几乎什么都试过了,但什么都没用

下面是我正在使用的XML

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_header"
    android:layout_width="match_parent"
    android:layout_height="@dimen/nav_header_height"
    android:background="@drawable/border_top_bottom_normal"
    android:gravity="bottom"
    android:orientation="vertical"

    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:weightSum="1">


    <LinearLayout
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/nav_header_logo"
        android:layout_width="match_parent"
        android:layout_height="@dimen/nav_header_height"
        android:background="@drawable/border_top_bottom_normal_logo"
        android:gravity="bottom"
        android:orientation="vertical"
        android:theme="@style/ThemeOverlay.AppCompat.Dark"
        android:weightSum="1">
    <ImageView

        android:id="@+id/logoImg"
        android:background="@android:color/transparent"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="25pt"
        android:src="@mipmap/lodkauvodbp"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        app:srcCompat="@android:drawable/sym_def_app_icon"/>


    </LinearLayout>

</LinearLayout>

这里是activity_settings.xml

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:weightSum="1"
        android:divider="?android:dividerHorizontal"
        android:showDividers="middle"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textview1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="50px"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Nastavenia"
            android:textSize="25dp"
            android:typeface="serif" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="left">
                <TextView
                    android:id="@+id/labelswitch"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Povolenie pre lokalizáciu"
                    android:textSize="15dp"
                    android:typeface="serif"
                    android:gravity="left"
                    android:textColor="#000000"/>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:gravity="right">
                    <android.support.v7.widget.SwitchCompat
                        android:id="@+id/lokalizationSwitch"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:checked="true" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="left">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Výber farebnej témy"
                    android:textSize="15dp"
                    android:typeface="serif"
                    android:textColor="#000000"/>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:gravity="right">

                    <Spinner
                        android:id="@+id/comboBoxTheme"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAlignment="textEnd"
                        android:layout_gravity="end"
                        android:drawSelectorOnTop="true"
                        android:entries="@array/theme_array" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        app:itemTextColor="@drawable/menu_text_color_normal"
        app:itemIconTint="@drawable/menu_text_color_normal"
        android:background="@drawable/border_top_bottom_normal">


    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible" />



    </android.support.design.widget.NavigationView>

</android.supp

我知道这样的问题在这里已经解决了,但这对我来说是一个特殊的问题

更新:我更新了onCreate方法 更新2:更新的错误消息 更新3:添加了活动设置.xml

移动:

    <?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:openDrawer="start">
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:weightSum="1"
        android:divider="?android:dividerHorizontal"
        android:showDividers="middle"
        android:orientation="vertical">

        <TextView
            android:id="@+id/textview1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="50px"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:text="Nastavenia"
            android:textSize="25dp"
            android:typeface="serif" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="left">
                <TextView
                    android:id="@+id/labelswitch"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Povolenie pre lokalizáciu"
                    android:textSize="15dp"
                    android:typeface="serif"
                    android:gravity="left"
                    android:textColor="#000000"/>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:gravity="right">
                    <android.support.v7.widget.SwitchCompat
                        android:id="@+id/lokalizationSwitch"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:checked="true" />
                </LinearLayout>
            </LinearLayout>
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <LinearLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:gravity="left">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Výber farebnej témy"
                    android:textSize="15dp"
                    android:typeface="serif"
                    android:textColor="#000000"/>
                <LinearLayout
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal"
                    android:gravity="right">

                    <Spinner
                        android:id="@+id/comboBoxTheme"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textAlignment="textEnd"
                        android:layout_gravity="end"
                        android:drawSelectorOnTop="true"
                        android:entries="@array/theme_array" />

                </LinearLayout>
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>


    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        app:itemTextColor="@drawable/menu_text_color_normal"
        app:itemIconTint="@drawable/menu_text_color_normal"
        android:background="@drawable/border_top_bottom_normal">


    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="visible" />



    </android.support.design.widget.NavigationView>

</android.supp
 setContentView(R.layout.activity_settings);
在超级呼叫之后,如下所示:

 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_settings);

如果您不在线(
isOnline()
为false),您的视图将永远不会膨胀,这将在您尝试按id查找内容时引发问题。

好的,我找到了解决方案。我只是不得不做那样的事

    navigationView = (NavigationView) findViewById(R.id.nav_view);
    View header = navigationView.getHeaderView(0);
    LinearLayout linear = (LinearLayout) header.findViewById(R.id.nav_header_logo);
    linear.setBackground(ContextCompat.getDrawable(this, R.drawable.border_top_bottom_matrix_logo));

这可以很好地工作,导航标头徽标不再为空

尝试删除
,您确定
isOnline()
方法返回
true
?您的代码与堆栈跟踪不匹配。您发布的代码段中没有
SwitchCompat
setChecked()
调用。请发布您的
Settings\u活动的完整源代码
,以下是相关说明。致以最诚挚的问候。抱歉,但这对我没有帮助:)你能尝试移动代码
super.onCreate(savedInstanceState);setContentView(R.layout.activity\u设置)在try语句之前执行?我尝试了此操作,但没有帮助:/。。。应用程序甚至崩溃了:/xml中的导航视图在哪里?如果你的activity_设置似乎没有它,那么你将找不到它,因此它将返回null,当你尝试调用该视图上的任何方法时,你的应用程序将失败。我很高兴你找到了它,但为什么你选择通过代码而不是xml设置背景?因为我创建了一个主题。而且很难通过XML对其进行更改。编程选项是更好的选择:)您可以只使用
android:background=“?attr/custom\u background\u from\u theme”