我有一个相对布局,其中有三个按钮,我正在尝试动态更改相对布局的背景。这是xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/mbi2"
android:id="@+id/rlMain"
android:layout_centerHorizontal="true">
<Button android:text="Compose"
android:id="@+id/btnCompose"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<Button android:text="Messages"
android:id="@+id/btnMessages"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/btnCompose"/>
<Button android:text="More >>"
android:id="@+id/btnMore"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_toRightOf="@id/btnMessages"/>
</RelativeLayout>
这是给我一个错误的java代码
RelativeLayout llMain=null;
try {
llMain = (RelativeLayout) findViewById(R.id.rlMain);
Resources res = getResources();
Drawable drawMbi = res.getDrawable(drawBgId);
llMain.setBackgroundDrawable(drawMbi);
} catch (Exception e) {
e.printStackTrace();
}
错误是
06-29 23:56:41.099: WARN/System.err(8487): java.lang.NullPointerException
06-29 23:56:41.099: WARN/System.err(8487): at com.me2youmob.cwrap.ChickenWrapActivity.loadMBIIntoView(ChickenWrapActivity.java:65)
06-29 23:56:41.099: WARN/System.err(8487): at com.me2youmob.cwrap.ChickenWrapActivity.onCreate(ChickenWrapActivity.java:23)
06-29 23:56:41.099: WARN/System.err(8487): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1066)
06-29 23:56:41.099: WARN/System.err(8487): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2797)
06-29 23:56:41.108: WARN/System.err(8487): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2854)
06-29 23:56:41.108: WARN/System.err(8487): at android.app.ActivityThread.access$2300(ActivityThread.java:136)
06-29 23:56:41.118: WARN/System.err(8487): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2179)
06-29 23:56:41.118: WARN/System.err(8487): at android.os.Handler.dispatchMessage(Handler.java:99)
06-29 23:56:41.118: WARN/System.err(8487): at android.os.Looper.loop(Looper.java:143)
06-29 23:56:41.118: WARN/System.err(8487): at android.app.ActivityThread.main(ActivityThread.java:5068)
06-29 23:56:41.118: WARN/System.err(8487): at java.lang.reflect.Method.invokeNative(Native Method)
06-29 23:56:41.118: WARN/System.err(8487): at java.lang.reflect.Method.invoke(Method.java:521)
06-29 23:56:41.118: WARN/System.err(8487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
06-29 23:56:41.118: WARN/System.err(8487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-29 23:56:41.118: WARN/System.err(8487): at dalvik.system.NativeStart.main(Native Method)
这个问题的另一个问题是,早先我在线性布局中有按钮,然后在相对布局中。我认为它无法达到相对布局并删除线性布局部分。它仍然给我同样的错误。
知道这里发生了什么吗?
新更新:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
RelativeLayout rlM = (RelativeLayout) findViewById(R.id.rlMain);
if (rlM == null)
{
Log.d("NULL CHECK","Layout is null");
}
else
{
Log.d("NULL CHECK","Layout is not null");
}
//spPreferences = getSharedPreferences(PREFS_NAME, 0);
//loadMBIIntoView();
//handleButtonClicks();
}
答案 0 :(得分:1)
View.findViewById()
函数只会查找您所在当前视图的子视图。
在这种情况下,您尝试在其中一个子视图中获取主视图,或者您尚未在Activity类中使用setContentView()
。
如果您尝试设置背景,我强烈建议您从活动中进行设置。
答案 1 :(得分:0)
我刚刚尝试你的代码,没问题,我认为你没有调用setContentView()。 ps:获取主视图的指针即可。
答案 2 :(得分:0)
另一种选择是像这样使用LayoutInflater:
LayoutInflater inflater = getLayoutInflater();
RelativeLayout rlMain = (RelativeLayout) inflater.inflate(R.layout.rlMain, null);
//do stuff with rlMain
setContentView(rlMain);