Android LinearLayout findViewById获取null
我这里有一个问题。我需要更改navigationView中布局的背景。我就是这么做的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
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”
。