Hem*_*mul 19 android android-fragments
second_fragment.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/f2_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/f2_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/f2_tv" />
<Button
android:id="@+id/f2_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="button"
android:text="@string/f2_bttn" />
Run Code Online (Sandbox Code Playgroud)
SecondFragment.java
public class SecondFragment extends Fragment {
FragmentInterface iface;
public interface FragmentInterface {
public void buttonPressed();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.second_fragment, container, false);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception
try {
iface = (FragmentInterface) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement FragmentInterface");
}
}
public void button(View view) {
}
}
Run Code Online (Sandbox Code Playgroud)
我是新手,我不知道为什么我的应用程序崩溃,按下按钮?谁能解释一下?
01-03 13:28:25.612: E/AndroidRuntime(1276): FATAL EXCEPTION: main
01-03 13:28:25.612: E/AndroidRuntime(1276): java.lang.IllegalStateException: Could not find a method button(View) in the activity class com.sp.fragments.MainActivity for onClick handler on view class android.widget.Button with id 'f2_button'
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$1.onClick(View.java:3584)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View.performClick(View.java:4202)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$PerformClick.run(View.java:17340)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Handler.handleCallback(Handler.java:725)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Handler.dispatchMessage(Handler.java:92)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.os.Looper.loop(Looper.java:137)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.app.ActivityThread.main(ActivityThread.java:5039)
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.reflect.Method.invokeNative(Native Method)
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.reflect.Method.invoke(Method.java:511)
01-03 13:28:25.612: E/AndroidRuntime(1276): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
01-03 13:28:25.612: E/AndroidRuntime(1276): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
01-03 13:28:25.612: E/AndroidRuntime(1276): at dalvik.system.NativeStart.main(Native Method)
01-03 13:28:25.612: E/AndroidRuntime(1276): Caused by: java.lang.NoSuchMethodException: button [class android.view.View]
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.Class.getConstructorOrMethod(Class.java:460)
01-03 13:28:25.612: E/AndroidRuntime(1276): at java.lang.Class.getMethod(Class.java:915)
01-03 13:28:25.612: E/AndroidRuntime(1276): at android.view.View$1.onClick(View.java:3577)
01-03 13:28:25.612: E/AndroidRuntime(1276): ... 11 more
01-03 13:28:27.563: I/Process(1276): Sending signal. PID: 1276 SIG: 9
Run Code Online (Sandbox Code Playgroud)
Par*_*ani 51
活动:
如果有活动,并且您android:onClick在XML中定义属性,那么您只需要在Activity中定义一个具有相同名称的方法.
分段:
但是每当你有Fragment并且想要通过定义android:onClick属性来定义click监听器时,你必须在调用Fragment的实际活动中定义一个具有相同名称的方法.
或者您可以通过编程方式简单地实现单击侦听器.
kar*_*ark 10
通过以onClickListener编程方式(而不是通过XML)设置,您将为自己省去很多麻烦.这应该可以帮助你做你想做的事情:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.second_fragment, container, false);
final View button = view.findViewById(R.id.f2_button);
button.setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
/* DO SOMETHING UPON THE CLICK */
}
}
);
return view;
}
Run Code Online (Sandbox Code Playgroud)
如果onClick="button"在.xml中定义,则需要定义public void button(View v)在Activity中命名的方法,该方法调用片段,而不是片段本身.
public class MainActivity extends FragmentActivity{
...
public void button(View v){
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18611 次 |
| 最近记录: |