我有一个模板视图;
template.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)。 / p>
PS!如果我以编程方式将监听器添加到btnMultiple它会工作,但我想知道为什么“android:onClick =”btnMultiple_clicked“”不起作用?
答案 0 :(得分:6)
Android会查找onClick
中Activity
属性中定义的方法。您的代码中存在的问题是,LayoutInflater
Application
Context
Context
Activity
Context
View
View myView = LayoutInflater.from(this).inflate(R.layout.template, viewFlipper, false);
的{{1}}初始化Activity
在那里找到(Context
传递给Activity
)。使用:
{{1}}
或指向将使用这些按钮的{{1}}的任何其他引用。 这是一个很好的例子,为什么你应该在大多数情况下使用{{1}}的{{1}}。