`

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  
我也被这个问题纠结了一个晚上!感谢楼主

相关推荐

    android使用include调用内部组件的方法

    2. 调用父视图的`findViewByID()`方法,传入`&lt;include&gt;`标签中给子组件指定的ID,这样就可以访问到`&lt;include&gt;`内部的具体组件。 这个过程展示了如何在Java代码中与`&lt;include&gt;`标签内的组件进行交互,这对于创建动态...

    Androidstudio调用jni的示例

    这个“Androidstudio调用jni的示例”是一个基础教程,旨在帮助初学者理解如何在Android Studio项目中使用JNI来调用本地C/C++代码。下面将详细介绍这个示例中的关键步骤和涉及的知识点。 1. **创建JNI接口** 在Java...

    Android调用JNI的简单实例(附详细步骤)

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码和其他语言写的代码进行交互。JNI在很多场景下都有应用,如性能优化、使用C/C++库或者访问硬件特性等。本教程将通过一个简单的实例,...

    ioctl系统调用流程

    在include/asm/unistd.h中不同的体系结构为每一个系统调用定义了惟一的编号。 系统调用流程的第一步是将系统调用号与系统调用响应函数相关联。以系统调用号__NR_name作为下标,可以找出系统调用表sys_call_table中...

    android中jni调用c++

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,包括C++。JNI对于实现性能敏感的部分、利用硬件加速、调用系统库或者集成第三方C/C++库等场景非常...

    android中两次调用jni

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,包括C、C++等。本篇将深入探讨如何在Android应用程序中两次调用JNI,并且调用不同的本地方法。 ...

    android调用jni实例

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言编写的代码进行交互,特别是C和C++。本教程将深入探讨如何在Android应用中使用JNI进行跨语言通信,以实现特定功能或提高...

    Android开发,JNI和Java、Kotlin代码的互相调用以及CMakeLists的常用属性使用

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java或Kotlin代码与本地C/C++代码进行交互。这种交互对于优化性能、利用硬件特性或集成第三方库至关重要。本篇将深入探讨JNI的使用,以及如何...

    Android use JNI CALL include .h method sample

    这个示例“Android use JNI CALL include .h method sample”是关于如何在Android项目中使用JNI调用包含.h头文件的方法。下面将详细解释这个过程。 首先,我们需要了解JNI的基本概念。JNI是Java平台提供的一种接口...

    Uniapp调用java代码-使用Android Studio,将Java代码打包成uniapp可以调用的aar文件

    【标题】: "在 Uniapp 中调用 Java 代码:使用 Android Studio 打包 AAR 文件教程" 【描述】: "本教程详细介绍了如何在 Uniapp 中调用 Java 代码,通过 Android Studio 将 Java 代码打包成 AAR 文件,以便在 Uniapp...

    android项目中嵌入cocos2dx项目demo

    - 在C++中,使用`#include &lt;jni.h&gt;`和`#include "YourJavaInterface.h"`来访问这些接口。 6. **编译和链接** - 配置CMakeLists.txt文件,确保所有库和源文件被正确地编译和链接。 - 在Android Studio的build....

    Android调用jni

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,允许Java代码与本地(C/C++)代码交互。JNI在各种场景下都非常有用,比如性能优化、利用现有的C库或者实现特定硬件功能等。本Demo是关于如何在...

    使用AndroidScreenCap截取ANdroid设备屏幕

    Context对象通常是我们当前的Activity或Application,它是Android系统中所有组件的基础,包含了运行环境的信息。而fileFullPath参数则指定了截图保存的位置和文件名。 在调用`takeScreenshot()`之前,你需要确保你...

    android使用jni返回两数之和

    在Android开发中,JNI(Java Native Interface)是一个关键的组件,它允许Java代码与其他语言写的代码进行交互。JNI在很多场景下都非常有用,比如优化性能、调用操作系统API或者利用硬件特性,本示例中我们将关注...

    Android下使用ViewStub控件加载

    标签"android"表明这是与Android平台相关的技术,"ViewStub"是本文的核心话题,而"include"则可能暗示了ViewStub可以与&lt;include&gt;标签配合使用,实现布局的复用和组合。在Android布局中,&lt;include&gt;标签可以将一个布局...

    android 程序中动态添加删除控件或布局

    - **使用LayoutInflater**:Android提供了LayoutInflater服务,可以将XML布局文件中的视图转换为运行时的对象。首先,我们需要通过`getSystemService()`方法获取LayoutInflater实例,然后调用`inflate()`方法加载...

    arm-linux-androideabi-4.9.7z

    arm-linux-androideabi-4.9.7z正是这样一个关键的工具链,它为开发者提供了在Windows上构建适用于ARM架构(Android设备普遍使用的处理器架构)的Linux应用程序的能力。 一、交叉编译基础 交叉编译是指在一个平台上...

    libmp3lame.so、 include for Android armv7a、arm64

    标题中的"libmp3lame.so、include for Android armv7a、arm64"揭示了这个压缩包是关于MP3编码器库的,适用于Android操作系统,并且包含了针对两种不同的处理器架构,即armv7a(armeabi-v7a)和arm64(armeabi-v8a)...

    Android的jni的调用CC++的几个应用基本类型数组类结构体.pdf

    在Android开发中,Java Native Interface (JNI) 是一个关键组件,允许Java代码调用本地(C/C++)函数,反之亦然。JNI在各种场景下非常有用,包括性能优化、利用现有的C/C++库以及访问操作系统级别的功能。本文将探讨...

Global site tag (gtag.js) - Google Analytics