android USES include to invoke methods on internal components

  • 2020-06-19 11:44:00
  • OfStack

This article shows how android USES include to invoke internal components. Share to everybody for everybody reference. The details are as follows:

Example 1:

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> 

How do you call components that come in from component 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(); 
  }}); 
  } 
}

But if include comes in xml, yes

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> 

The above method will not be implemented, will report null pointer.
Because with merge, importing is equivalent to the current component under view, you can just go straight to findViewById.

In that case... The problem of the same include multiple times can be solved

Hopefully, this article has helped you with your Android programming.


Related articles: