首页 > 代码库 > 怎么在Fragment的布局文件中的组件onclik调用Fragment的方法?

怎么在Fragment的布局文件中的组件onclik调用Fragment的方法?

============问题描述============


xml文件:[color=#FF0000][/color]
 <Button
            android:id="@+id/btn_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="4dp"
            android:layout_marginRight="4dp"
            android:background="@drawable/btn_selector"
            android:onClick="onButtonClickHandler"
            android:padding="5dp"
            android:text="@string/one" />

fragment类

public void onButtonClickHandler(View view) {
Button button = (Button) view;
if ("del".equals(button.getText())) {
String s = String.valueOf(mResultEt.getText());
if (s.length() > 0) {
if (s.length() == 1) {
clear("0");
} else {
mResultEt.setText(s.subSequence(0, s.length() - 1));
}
mOperatorNumber = mResultEt.getText().toString();
}
} else if ("+".equals(button.getText()) || "-".equals(button.getText())
|| "*".equals(button.getText()) || "÷".equals(button.getText())
|| "=".equals(button.getText())) {
caculate();// 计算
mOperator = button.getText().toString();// 操作符
mOldText = mResultEt.getText().toString();
mInputDone = true;
} else {
if (mInputDone) {
mResultEt.setText(button.getText().toString());
mInputDone = false;
} else {
mResultEt.append(button.getText().toString());
}
mOperatorNumber = mResultEt.getText().toString();
}
mResultEt.requestFocus(TextView.FOCUS_RIGHT);
}

Tabactivity类中调用fragment
tabActionBar.addTab(tabActionBar
.newTab()
.setText(R.string.calulator)
.setTabListener(
new MyTabListener<CalulatorFragment>(this,
CalulatorFragment.class)));

运行之后出现:
09-26 23:42:10.713: E/AndroidRuntime(12863): java.lang.IllegalStateException: Could not find a method onButtonClickHandler(View) in the activity class com.tcl.viewui.MainTabActivity for onClick handler on view class android.widget.Button with id ‘btn_1

============解决方案1============


为什么不自己在 Fragment 中手动设置监听呢

记得 View 的源码中,你在 onClick 中设置函数名之后,他是在传入的 context 对象的类中进行查找有无对应的函数,如果有就使用反射机制进行处理.这点是我们无法改变的.

而且你这样使用 onClick="xxxx" 的话,混淆之后可能会出错啊,而且android 的这一块是通过 Java 反射机制处理的,其速度相较于直接调用会慢一些的

怎么在Fragment的布局文件中的组件onclik调用Fragment的方法?