我正在尝试创建一个启动页面,每次打开时都会显示不同的背景。 我使用以下代码来做到这一点:
package com.example.asd;
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.view.Menu;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
Drawable back;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActionBar().hide();
int num=(int)Math.ceil(Math.random() * 6);
switch(num)
{
case 1: back=getResources().getDrawable(R.drawable.f1);
break;
case 2: back=getResources().getDrawable(R.drawable.f2);
break;
case 3: back=getResources().getDrawable(R.drawable.f3);
break;
case 4: back=getResources().getDrawable(R.drawable.f4);
break;
case 5: back=getResources().getDrawable(R.drawable.f5);
break;
case 6: back=getResources().getDrawable(R.drawable.f6);
break;
default:back=getResources().getDrawable(R.drawable.f5);
break;
}
LinearLayout l1=(LinearLayout)findViewById(R.layout.activity_main);
l1.setBackground(back);
setContentView(l1);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
当我尝试运行此代码时,应用程序崩溃。请帮助!!!
答案 0 :(得分:1)
您收到NullPointerException
因为findViewById
在View
之后返回setContentView()
。
更改此行
LinearLayout l1=(LinearLayout)findViewById(R.layout.activity_main);
到
LinearLayout l1=new LinearLayout(this);
根据OP要求将这些行添加到您的代码中
TextView textView=new TextView(this);
textView.setText("setYour test");
l1.addView(textView);
答案 1 :(得分:1)
获取NullPointerException
因为您在访问当前布局视图之前没有调用setContentView
。这样做:
setContentView(R.layout.activity_main);
LinearLayout l1=(LinearLayout)findViewById(R.id.layout_id_in_activity_main);
l1.setBackground(back);
还可以使用R.id.<view_id_in_xml>
代替R.layout.<layout_name_in_res_layout_dir>
来使用id初始化来自xml的任何视图。
答案 2 :(得分:0)
替换这些行
LinearLayout l1=(LinearLayout)findViewById(R.layout.activity_main);
l1.setBackground(back);
setContentView(l1);
如 在setcontent视图中传递布局ID
setContentView(R.layout.main)
LinearLayout l1=(LinearLayout)findViewById(R.layout.activity_main);
l1.setBackground(back);
或
LinearLayout l1=new LinearLayout(this);
l1.setBackground(back);
setContentView(l1);
答案 3 :(得分:0)
从此
更改您的代码LinearLayout l1=(LinearLayout)findViewById(R.layout.activity_main);
l1.setBackground(back);
到
LinearLayout l1=(LinearLayout)findViewById(R.id.activity_main);
l1.setBackground(back);
这将解决您的问题