Android 为什么不';膨胀的视图是否响应单击侦听器?

Android 为什么不';膨胀的视图是否响应单击侦听器?,android,layout,onclick,inflate,Android,Layout,Onclick,Inflate,我正在尝试为布局中的按钮设置单击侦听器。单击侦听器仅在我直接调用findViewById()时触发,而不是在我从膨胀的布局中获取视图时触发: public class MyActivity extends Activity implements View.OnClickListener { private static final String TAG = "MyActivity"; @Override public void onCreate( Bundle save

我正在尝试为布局中的按钮设置单击侦听器。单击侦听器仅在我直接调用findViewById()时触发,而不是在我从膨胀的布局中获取视图时触发:

public class MyActivity extends Activity implements View.OnClickListener {
    private static final String TAG = "MyActivity";

    @Override
    public void onCreate( Bundle savedInstanceState ) {
        super.onCreate( savedInstanceState );
        setContentView( R.layout.test );

        Button button = (Button)findViewById( R.id.mybutton );
        button.setOnClickListener( this );

        LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE );
        ViewGroup rootLayout = (ViewGroup)inflater.inflate( R.layout.test,
            (ViewGroup)findViewById( R.id.myroot ), false );
        rootLayout.getChildAt( 0 ).setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick( View v ) {
                Log.d( TAG, "Click from inflated view" );
            }
        } );
    }

    @Override
    public void onClick( View v ) {
        Log.d( TAG, "Click" );
    }
}
以下是我的布局:

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


为什么会这样?我只从第一个方法而不是膨胀视图中获取click事件。

您只从第一个方法(向LogCat发送“click”的方法)获取click事件,因为您没有向视图层次结构添加膨胀的任何内容。onCreate()方法的第二行,
setContentView(R.layout.test)负责从布局文件中展开视图,并将它们添加到活动的视图层次结构中。当您在几行之后手动进行膨胀时,您忘记了将rootLayout添加到视图层次结构中。如果不这样做,就没有任何东西可以单击,因此就没有其他onClick()方法在LogCat上的输出。

您只会从第一个方法(向LogCat发送“单击”的方法)获得单击事件,因为您没有向视图层次结构添加任何膨胀的内容。onCreate()方法的第二行,
setContentView(R.layout.test)负责从布局文件中展开视图,并将它们添加到活动的视图层次结构中。当您在几行之后手动进行膨胀时,您忘记了将rootLayout添加到视图层次结构中。如果不这样做,就没有什么可点击的,因此也就没有其他onClick()方法在LogCat上的输出。

结果我需要调用
setContentView(rootLayout)
结果我需要调用
setContentView(rootLayout)