onClick: 找不到方法

12 浏览
0 Comments

onClick: 找不到方法

我对Android Studio非常陌生。我想要的很简单:我按下一个按钮,然后应该发生某些事情。

所以,在我的片段中,我有一个在XML中如下所示的按钮:

我的GeneralFragment.java代码如下:

package ch.yourclick.kitt.fragments;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import ch.yourclick.kitt.R;
/**
 * 一个简单的{@link Fragment}子类。
 * 使用{@link GeneralFragment#newInstance}工厂方法
 * 创建此片段的实例。
 */
public class GeneralFragment extends Fragment {
    public GeneralFragment() {
        // 必需的空公共构造方法
    }
    /**
     * 使用提供的参数创建此片段的新实例。
     *
     * @return GeneralFragment的新实例。
     */
    // TODO: 重命名和更改参数的类型和数量
    public static GeneralFragment newInstance() {
        GeneralFragment fragment = new GeneralFragment();
        Bundle args = new Bundle();
        fragment.setArguments(args);
        return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // 膨胀此片段的布局
        return inflater.inflate(R.layout.fragment_general, container, false);
    }
    public void doSumth() {
        System.out.println("Hello");
    }
}

我的问题是我遇到了错误:

java.lang.IllegalStateException: 在androidx.appcompat.widget.App的父级或祖先上找不到方法doSumth(View),该方法在android:onClick属性中定义为视图类

我做错了什么?

0
0 Comments

问题出现的原因是没有正确添加一个View参数到函数中。解决方法可以有两种:

1. 在函数中添加View参数,例如:

public void doSumth(View view)
{
    System.out.println("Hello");
}

2. 在代码中使用以下方式实现:

public class MainActivity extends AppCompatActivity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button bt1 = (Button) findViewById(R.id.b1);
        bt1.setOnClickListener(new View.OnClickListener()
        {
            public void onClick(View v)
            {
                System.out.println("Hello");
            }
        });
    }
}

如果点击按钮后仍然出现相同的错误,可能是XML文件中的函数名写错了。可以检查XML文件中的onClick参数是否正确。另外,也可以尝试使用第二种方法,即在编辑中添加的选项。

原文作者尝试了第二种方法,但是出现了错误:Cannot resolve method 'setContentView' in 'GeneralFragment'。后来作者尝试将代码放在onCreateView()中而不是onCreate()中,问题得到解决。

0
0 Comments

原因:出现(onClick: Method can not be found)这个问题的原因是在XML中使用了android:onClick属性来绑定一个方法,但是这个方法没有添加View参数。

解决方法:需要在方法中添加一个View类型的参数。

代码示例:

public void doSumth(View view) {
    System.out.println("Hello");
}

然而,即使添加了View参数,点击按钮后仍然会出现相同的错误。

0