Android:将多个.XML和对象膨胀到一个.XML上

Android:将多个.XML和对象膨胀到一个.XML上,android,android-layout,view,viewgroup,layout-inflater,Android,Android Layout,View,Viewgroup,Layout Inflater,对象: (运行API 8) 通过编程,我试图将以下内容扩展到单个布局main.xml bg_content1.xml bg_content2.xml @+id/img_标志 @+id/str\u用户名 注意: @+id/img_徽标是位于bg_content3.xml中的ImageView的id @+id/str_username是位于bg_content4.xml中的文本视图的id 请不要问我为什么要将多个布局和对象充气到另一个布局上。我正试图优化我的布局以便于维护 main.xml &l

对象: (运行API 8) 通过编程,我试图将以下内容扩展到单个布局main.xml

  • bg_content1.xml
  • bg_content2.xml
  • @+id/img_标志
  • @+id/str\u用户名
注意:

  • @+id/img_徽标是位于bg_content3.xml中的ImageView的id
  • @+id/str_username是位于bg_content4.xml中的文本视图的id
  • 请不要问我为什么要将多个布局和对象充气到另一个布局上。我正试图优化我的布局以便于维护
  • main.xml

    <LinearLayout android:id="@+id/main">
    </LinearLayout>
    
    <LinearLayout android:id="@+id/bg_content1">
        <TextView
            android:text:"bg_content1 here"
            //other attributes omitted
        </TextView>
    </LinearLayout>
    
    <LinearLayout android:id="@+id/bg_content2">
        <TextView
            android:text:"bg_content2 here"
            //other attributes omitted
        </TextView>
    </LinearLayout>
    
    <LinearLayout android:id="@+id/bg_content2">
        <ImageView
            android:id:"@+id/img_logo"
            //other attributes omitted
        </TextView>
    </LinearLayout>
    
    <LinearLayout android:id="@+id/bg_content4">
        <TextView
            android:id:"@+id/str_username"
            //other attributes omitted
        </TextView>
    </LinearLayout>
    
    @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
    
    由@Ikaros提供的解决方案 我修改了以下一些小的语法错误:

    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);
    
    例如:

    ImageView bg_img = (ImageView) inflater.inflate(R.id.img_logo, null);
    container.addView(bg_img);
    
    你想让你的孩子膨胀,我认为这是你的错误。 您可以尝试以下方法:

    LinearLayout linear_layout = (LinearLayout) inflater.inflate(R.layout.bg_content3.xml, null);
    container.addView(linear_layout);
    
    如果需要对ImageView的引用,可以将其称为:

    (ImageView) bg_img = (ImageView) linear_layout.findViewById(R.id.bg_img);
    

    我知道您是以编程方式说的,但是XML中有一个标记允许您重用布局