Android 应用程序崩溃(片段和 xml onclick)
Posted
技术标签:
【中文标题】Android 应用程序崩溃(片段和 xml onclick)【英文标题】:Android app crashing (fragment and xml onclick) 【发布时间】:2012-12-17 20:47:35 【问题描述】: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_
android:layout_
android:orientation="vertical" >
<TextView
android:id="@+id/f2_textview"
android:layout_
android:layout_
android:text="@string/f2_tv" />
<Button
android:id="@+id/f2_button"
android:layout_
android:layout_
android:onClick="button"
android:text="@string/f2_bttn" />
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)
我是新手,我不知道为什么我的应用程序在按下按钮时崩溃?谁能解释一下?
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
【问题讨论】:
请发布 LogCat 以便我们查看崩溃情况 您可以尝试从您的onCreateView
函数内部将OnClickListener
设置为您的按钮吗?据我所知,来自 xml 的onClick
将尝试在活动中而不是在片段中找到该函数。
发布您的 logcat 输出 ..以便我们了解问题
你的activity是否真的实现了FragmentInterface接口?
【参考方案1】:
活动:
如果有活动,如果你在 XML 中定义了android:onClick
属性,那么你只需要在活动中定义一个同名的方法。
片段:
但是,当您拥有 Fragment 时,如果您想通过定义 android:onClick
属性来定义点击监听器,那么您必须在调用 Fragment 的实际活动中定义一个具有相同名称的方法。
或者您可以简单地以编程方式实现点击监听器。
【讨论】:
【参考方案2】:以编程方式(而不是通过 XML)设置 onClickListener
可以省去很多麻烦。这应该可以帮助您做您想做的事情:
@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;
【讨论】:
我也使用了 XML 变体。有些方法有效,有些找不到。刚回到听众那里,一切正常【参考方案3】:如果您在.xml 中定义onClick="button"
,您需要在调用片段的Activity 中定义一个名为public void button(View v)
的方法,而不是在片段本身中。
public class MainActivity extends FragmentActivity
...
public void button(View v)
...
...
【讨论】:
【参考方案4】:您的方法按钮必须在 MainActivity 类中定义。
【讨论】:
【参考方案5】:这一直为我工作:(Android工作室)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
View rootView = inflater.inflate(R.layout.update_credential, container, false);
Button bt_login = (Button) rootView.findViewById(R.id.btnSend);
bt_login.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View view)
System.out.println("Hi its me");
// end onClick
);
return rootView;
// end onCreateView
【讨论】:
以上是关于Android 应用程序崩溃(片段和 xml onclick)的主要内容,如果未能解决你的问题,请参考以下文章
Android - 应用程序启动时片段 onCreate 崩溃
当我切换到包含片段的活动时应用程序崩溃(二进制 XML 文件第 10 行:二进制 XML 文件第 10 行:膨胀类片段时出错)
android.view.InflateException 膨胀类片段时出错,二进制 XML 文件第 1 行?