【问题标题】:java.lang.IllegalStateException: Could not find method in a parent or ancestor Context for android:onClick attributejava.lang.IllegalStateException:在父或祖先上下文中找不到 android:onClick 属性的方法
【发布时间】:2017-09-07 22:52:45
【问题描述】:

我正在尝试将 onClick 方法 front() 添加到我的 Button。但是,当我单击 Button 时,它会返回此错误:

java.lang.IllegalStateException: Could not find method front(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.support.v7.widget.AppCompatButton with id 'front'

这是我的 xml:

<Button
    android:id="@+id/front"
    android:onClick="front"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Text" />

Register.java:

public class Register extends AppCompatActivity {

    private Button front;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_register);

        front = (Button) findViewById(R.id.front);
    }

    private void front(View v) {
        Toast.makeText(Register.this, "String", Toast.LENGTH_LONG).show();
    }

}

知道问题出在哪里吗?

【问题讨论】:

  • 我建议你直接在代码中设置onClickListener是最好的方法,它永远不会失败,你也不需要在主代码中声明这么多函数。

标签: java android


【解决方案1】:

一定要正确编写属性值onClick的语法。就我而言,我忘记了角色 }

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="true"
    android:onClick="@{() -> viewModel.onItemClick(position)}">

GL

【讨论】:

    【解决方案2】:

    您在活动中的front method 应该是公开。您现在已将其设为私有。

    Android Developer 网站也对此进行了描述。

    为了使其工作,该方法必须是公共的并接受一个视图作为它的唯一参数

    public void front(View v) {
        Toast.makeText(Register.this, "String", Toast.LENGTH_LONG).show();
    }
    

    【讨论】:

    • 并且不要“即时运行”(应用更改),它不会生效。除非你运行 'app' (Shift +F10)
    【解决方案3】:

    这就是通过 Activity 将点击动作赋予按钮的方式。

    front.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Toast.makeText(this, "String", Toast.LENGTH_LONG).show();
    
                }
            });
    

    通过xmlonClick给按钮动作,

    public void front(View v) {
                    Toast.makeText(this, "String", Toast.LENGTH_LONG).show();
    }
    

    【讨论】:

    • 那个方法也是正确的。您也可以在 xml 中定义点击
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多