我一直收到错误"在活动课"中找不到方法onclick(view),现在已经有一段时间了,尽管我付出了最大的努力但我还没有做出任何改变进展。
这是我的代码:
logcat的:
02 15:44:48.972 14881-14881/edu.uwgb.ratemyanimal E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.uwgb.ratemyanimal, PID: 14881
java.lang.IllegalStateException: Could not find method switchImage(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'btnThumbsUp'
at android.view.View$DeclaredOnClickListener.resolveMethod(View.java:4757)
at android.view.View$DeclaredOnClickListener.onClick(View.java:4716)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
switchImage功能:
public void switchImage()
{
Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show();
}
现在已注释掉的两个onClickListener:
// onclick
// Button btnThumbsUp = (Button) getActivity().findViewById(R.id.btnThumbsUp);
//
// btnThumbsUp.setOnClickListener(new View.OnClickListener(){
// public void onClick(View v) {
// ImageView dogImage = getActivity().findViewById(R.id.imageDog);
//// dogImage.setImageResource(dogImages.get(index));
// dogImage.setImageResource(dogImages.get(index));
//
// Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show();
//
// index++;
//
// }
// });
//
// Button btnThumbsDown = getActivity().findViewById(R.id.btnThumbDown);
//
// btnThumbsDown.setOnClickListener(new View.OnClickListener(){
// public void onClick(View v) {
// }
// });
片段的XML:
<android.support.v7.widget.AppCompatButton
android:id="@+id/btnThumbsUp"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_marginLeft="-118dp"
android:layout_marginTop="-751dp"
android:text="Thumbs Up"
android:onClick="switchImage"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@id/guideButtons" />
<android.support.v7.widget.AppCompatButton
android:id="@+id/btnThumbDown"
android:text="Thumbs Down"
android:onClick="switchImage"
android:layout_width="130dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/guideButtons"
app:layout_constraintRight_toRightOf="parent"/>
我尝试过的事情:
<Button/>
至<android.support.v7.widget.AppCompatButton
onClickListener
函数onCreate
我一直试图让这个工作很长一段时间。我已经找到了很多不同的东西,没有任何效果。我在底部导航栏中创建了各种片段,并且无法让我的按钮为我的生活工作。
感谢。
修改
这是onCreateView方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
// View view = inflater.inflate(R.layout.fragment_dog, container, false);
Button btnThumbsUp = (Button) getActivity().findViewById(R.id.btnThumbsUp);
btnThumbsUp.setOnClickListener(new View.OnClickListener(){
public void onClick(View v) {
ImageView dogImage = getActivity().findViewById(R.id.imageDog);
dogImage.setImageResource(dogImages.get(index));
// Toast.makeText(getActivity(), "Function hit", Toast.LENGTH_SHORT).show();
index++;
}
});
答案 0 :(得分:4)
与android:onClick
属性一起使用的方法必须采用单个View
参数。变化
public void switchImage()
到
public void switchImage(View view)
此外:该方法中包含getActivity()
的事实暗示它位于片段中。通过android:onClick
属性设置的监听器仅在您的活动中搜索该方法,因此它应该在活动中。
(或者:除了片段中的android:onClick
和findViewById()
外,不要使用setOnClickListener()
。)
答案 1 :(得分:0)
您的方法switchImage(View view)
应该在Activity
中,android:onClick="switchImage"
可以使用Fragment
,<{1}} 。
你曾说过你试图在OnClicklistener
onCreateView
的Fragment
设置onCreate
(为片段提供建议!)所以我建议你设置onClickListener但不要在片段的onCreate
方法中但在onCreateView
中。这是因为片段在附加到活动之前可能没有上下文。
此后,您的代码改进是在这一行中以这种方式显示toast不需要应用程序上下文:
Toast.makeText(getActivity().getApplicationContext(), "Function hit", Toast.LENGTH_SHORT).show();
删除getApplicationContext()
这里不需要使用getActivity()
。