【问题标题】:Inflated View doesn't catch onClick event膨胀的视图没有捕捉到 onClick 事件
【发布时间】:2013-05-07 19:28:28
【问题描述】:

我有一个看起来像的模板视图;

模板.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/contentLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/view_background"
android:gravity="center_vertical"
tools:context=".MainActivity" >

<Button
    android:id="@+id/btnMultiple"
    android:layout_width="0dp"
    android:layout_height="150dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="5dp"
    android:layout_weight="1"
    android:background="@drawable/button_backgroundblue"
    android:onClick="btnMultiple_clicked"
    android:tag="4"
    android:text="@string/mc_abcd"
    android:textColor="@drawable/button_textcolor"
    android:textSize="@dimen/h2" />

我正在以编程方式创建此视图,然后我将此视图添加到 ViewFlipper 中;

activity_main.java

public void btnCreateView_clicked(View view) {
    ViewFlipper viewFlipper = (ViewFlipper)findViewById(R.id.flipper);

    View myView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.template, viewFlipper, false);
    viewFlipper.addView(myView);
    viewFlipper.showNext(); // Showing lastly created myView successfully. }

我的活动也有类似的公共功能;

activity_main.java

    public void btnMultiple_clicked(View view) {
        //Save the world !
}

当我从第一个视图中按下 btnCreateView 按钮时,它成功创建了模板 (myView),然后将其添加到 ViewFlipper 中。当我单击 btnMultiple 时出现错误并且我的应用程序崩溃; “在活动类 android.app.Application 中找不到方法 btnMultiple_clicked(View) 用于视图类 android.widget.Button 上的 onClick 处理程序,ID 为'btnMultiple'”我确定存在现有方法 btnMultiple_clicked(View)。

PS!如果我以编程方式将侦听器添加到 btnMultiple 它会起作用,但我想知道为什么“android:onClick="btnMultiple_clicked"”不起作用?

【问题讨论】:

    标签: android onclick android-inflate


    【解决方案1】:

    Android 在Activity 中查找onClick 属性中定义的方法。您的代码中的问题是您用于LayoutInflater 初始化ApplicationContext 而不是ActivityContext 所以该方法不会在那里找到(Context 已通过到View)。使用:

    View myView = LayoutInflater.from(this).inflate(R.layout.template, viewFlipper, false);
    

    或任何其他指向Activity 的引用,这些按钮将在其中使用。 这是一个很好的例子,为什么您应该在大多数情况下使用 ContextActivity

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2011-12-04
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多