android使用include调用内部组件的方法
本文实例讲述了android使用include调用内部组件的方法。分享给大家供大家参考。具体如下:
例子一:
sublayout.xml
<?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns: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="AButton" /> </LinearLayout> mail.xml <?xmlversion="1.0"encoding="utf-8"?> <LinearLayoutxmlns: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" /> <includeandroid:id="@+id/main1"layout="@layout/sublayout"/> <includeandroid:id="@+id/main2"layout="@layout/sublayout"/> <Button android:id="@+id/startanotheractivity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="StartAnotherActivity" /> </LinearLayout>
如何调用组件include进来的组件呢。
packagecom.AndroidIncludeLayout; importandroid.app.Activity; importandroid.content.Intent; importandroid.os.Bundle; importandroid.view.View; importandroid.widget.Button; importandroid.widget.Toast; publicclassAndroidIncludeLayoutextendsActivity{ /**Calledwhentheactivityisfirstcreated.*/ @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); ViewsubLayout1=(View)findViewById(R.id.main1); ViewsubLayout2=(View)findViewById(R.id.main2); ButtonmyButton_main1=(Button)subLayout1.findViewById(R.id.mybutton); ButtonmyButton_main2=(Button)subLayout2.findViewById(R.id.mybutton); ButtonstartAnotherActivity=(Button)findViewById(R.id.startanotheractivity); startAnotherActivity.setOnClickListener(newButton.OnClickListener(){ @Override publicvoidonClick(Viewarg0){ //TODOAuto-generatedmethodstub Intentintent=newIntent(); intent.setClass(AndroidIncludeLayout.this,AnotherActivity.class); startActivity(intent); }}); myButton_main1.setOnClickListener(newButton.OnClickListener(){ @Override publicvoidonClick(Viewarg0){ //TODOAuto-generatedmethodstub Toast.makeText(AndroidIncludeLayout.this,"Button1Pressed",Toast.LENGTH_LONG).show(); }}); myButton_main2.setOnClickListener(newButton.OnClickListener(){ @Override publicvoidonClick(Viewarg0){ //TODOAuto-generatedmethodstub Toast.makeText(AndroidIncludeLayout.this,"Button2Pressed",Toast.LENGTH_LONG).show(); }}); } }
但是如果include进来的xml,是
sublayout.xml
<?xmlversion="1.0"encoding="utf-8"?> <mergexmlns: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="AButton" /> </merge>
则以上的方法将不能实现,会报空指针。
因为用了merge后,导入进来就相当于是当前view下的组件了,所以直接findViewById就可以了。
这样的话。。。可以解决了include多次同一个layout的问题
希望本文所述对大家的Android程序设计有所帮助。