`

android 使用include 调用内部组件

 
阅读更多
http://androidbiancheng.blogspot.com/2011/01/includeui.html

折腾了一晚上,搞明白了include 调用组件问题。

例子一:
sublayout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="#505050"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="SubLayout"
    />
<Button
android:id="@+id/mybutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=" A Button "
    />
</LinearLayout>

mail.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<include android:id="@+id/main1" layout="@layout/sublayout" />
<include android:id="@+id/main2" layout="@layout/sublayout" />
<Button
    android:id="@+id/startanotheractivity"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text=" Start Another Activity "
    />
</LinearLayout>

如何调用组件include进来的组件呢。

package com.AndroidIncludeLayout;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class AndroidIncludeLayout extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        View subLayout1 = (View)findViewById(R.id.main1);
        View subLayout2 = (View)findViewById(R.id.main2);
        Button myButton_main1 = (Button)subLayout1.findViewById(R.id.mybutton);
        Button myButton_main2 = (Button)subLayout2.findViewById(R.id.mybutton);
        Button startAnotherActivity = (Button)findViewById(R.id.startanotheractivity);

        
        startAnotherActivity.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Intent intent = new Intent();
             intent.setClass(AndroidIncludeLayout.this, AnotherActivity.class);
             startActivity(intent);
    
   }});
        
        myButton_main1.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Toast.makeText(AndroidIncludeLayout.this, "Button 1 Pressed", Toast.LENGTH_LONG).show();
   }});
        
        myButton_main2.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    Toast.makeText(AndroidIncludeLayout.this, "Button 2 Pressed", Toast.LENGTH_LONG).show();
   }});
    }
}
但是如果include进来的xml,是
sublayout.xml

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="SubLayout"
    />
<Button
android:id="@+id/mybutton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text=" A Button "
    />
</merge>

则以上的方法将不能实现,会报空指针。
因为用了merge后,导入进来就相当于是当前view下的组件了,所以直接

findViewById就可以了。
分享到:
评论
1 楼 gubishan 2013-08-15  
我也被这个问题纠结了一个晚上!感谢楼主

相关推荐

Global site tag (gtag.js) - Google Analytics