Objet: (Running API 8) Programmatically, je suis en train de gonfler le suivant sur une seule mise en page, main.xmlAndroid: Gonflage multiples .XML et des objets sur un seul .XML
- bg_content1.xml
- bg_content2.xml
- @ + id/img_logo
- @ + id/str_username
Note:
- @ + id/img_logo est un identifiant d'un ImageView situé dans bg_content3.xml
- @ + id/str_username est un identifiant d'un TextView situé dans bg_content4.xml
- S'il vous plaît ne me demandez pas pourquoi je dois gonfler plusieurs mises en page et objets sur l'autre mise en page. J'essaie d'optimiser mes mises en page pour des raisons de maintenabilité.
main.xml
<LinearLayout android:id="@+id/main">
</LinearLayout>
bg_content1.xml
<LinearLayout android:id="@+id/bg_content1">
<TextView
android:text:"bg_content1 here"
//other attributes omitted
</TextView>
</LinearLayout>
bg_content2.xml
<LinearLayout android:id="@+id/bg_content2">
<TextView
android:text:"bg_content2 here"
//other attributes omitted
</TextView>
</LinearLayout>
bg_content3.xml
<LinearLayout android:id="@+id/bg_content2">
<ImageView
android:id:"@+id/img_logo"
//other attributes omitted
</TextView>
</LinearLayout>
bg_content4.xml
<LinearLayout android:id="@+id/bg_content4">
<TextView
android:id:"@+id/str_username"
//other attributes omitted
</TextView>
</LinearLayout>
MainActivity.xml
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout container = (LinearLayout) findViewById(R.id.main);
LayoutInflater inflater = LayoutInflater.from(this);
LinearLayout bg_content = (LinearLayout) inflater.inflate(
R.layout.bg_content1, null);
container.addView(bg_content);
bg_content = (LinearLayout) inflater.inflate(
R.layout.bg_content2, null);
container.addView(bg_content);
ImageView bg_img = (ImageView) inflater.inflate(R.id.img_logo, null);
container.addView(bg_img);
TextView bg_str = (TextView) inflater.inflate(R.id.str_username, null);
container.addView(bg_str);
}
logcat
08-26 14:16:43.457: D/AndroidRuntime(1726): Shutting down VM
08-26 14:16:43.457: W/dalvikvm(1726): threadid=1: thread exiting with uncaught exception (group=0x40015578)
08-26 14:16:43.558: E/AndroidRuntime(1726): FATAL EXCEPTION: main
08-26 14:16:43.558: E/AndroidRuntime(1726): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android/com.example.android.ExLayoutInflaterActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 type #0x12 is not valid
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.os.Handler.dispatchMessage(Handler.java:99)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.os.Looper.loop(Looper.java:130)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread.main(ActivityThread.java:3687)
08-26 14:16:43.558: E/AndroidRuntime(1726): at java.lang.reflect.Method.invokeNative(Native Method)
08-26 14:16:43.558: E/AndroidRuntime(1726): at java.lang.reflect.Method.invoke(Method.java:507)
08-26 14:16:43.558: E/AndroidRuntime(1726): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
08-26 14:16:43.558: E/AndroidRuntime(1726): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
08-26 14:16:43.558: E/AndroidRuntime(1726): at dalvik.system.NativeStart.main(Native Method)
08-26 14:16:43.558: E/AndroidRuntime(1726): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f050000 type #0x12 is not valid
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.content.res.Resources.loadXmlResourceParser(Resources.java:1874)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.content.res.Resources.getLayout(Resources.java:731)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.view.LayoutInflater.inflate(LayoutInflater.java:318)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
08-26 14:16:43.558: E/AndroidRuntime(1726): at com.example.android.ExLayoutInflaterActivity.onCreate(ExLayoutInflaterActivity.java:26)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
08-26 14:16:43.558: E/AndroidRuntime(1726): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
08-26 14:16:43.558: E/AndroidRuntime(1726): ... 11 more
solution fournie par @Ikaros J'ai modifié quelques erreurs mineures syntaxiques ci-dessous:
bg_content = (LinearLayout) inflater.inflate(
R.layout.bg_content3, null);
container.addView(bg_content);
ImageView bg_img = (ImageView) bg_content.findViewById(R.id.img_logo);
bg_content = (LinearLayout) inflater.inflate(R.layout.bg_content4, null);
container.addView(bg_content);
TextView bg_str = (TextView) bg_content.findViewById(R.id.str_username);
Je sais que vous avez dit programme, mais il y a la balise en XML vous permet de réutiliser les mises en page –
Patrick