无法在活动类

时间:2017-11-02 20:57:49

标签: java android onclick

我一直收到错误"在活动课"中找不到方法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"/>

我尝试过的事情:

  • 更改为xml中的按钮<Button/><android.support.v7.widget.AppCompatButton
  • 使用`android:onClick =&#34; switchImage&#34;
  • 通过XML调用该函数
  • 在片段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++;

            }
        });

2 个答案:

答案 0 :(得分:4)

android:onClick属性一起使用的方法必须采用单个View参数。变化

public void switchImage()

public void switchImage(View view)

此外:该方法中包含getActivity()的事实暗示它位于片段中。通过android:onClick属性设置的监听器仅在您的活动中搜索该方法,因此它应该在活动中。

(或者:除了片段中的android:onClickfindViewById()外,不要使用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()