每次打开应用程序时创建一个具有不同背景的启动页面

时间:2014-03-15 04:52:29

标签: android

我正在尝试创建一个启动页面,每次打开时都会显示不同的背景。 我使用以下代码来做到这一点:

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

}

当我尝试运行此代码时,应用程序崩溃。请帮助!!!

4 个答案:

答案 0 :(得分:1)

您收到NullPointerException因为findViewByIdView之后返回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);

这将解决您的问题