【问题标题】:Issue with onClick methodonClick 方法的问题
【发布时间】:2016-12-07 09:27:15
【问题描述】:

我在 android studio 中编写了一个 xml 代码,以便在发生按钮点击时更新视图,但我收到 错误强>。请帮忙。

XML 代码:

<Button
    android:id="@+id/next_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="submit"
    android:layout_marginTop="16dp"
    android:onClick="order"/>

Java 代码:

      public void order(View view) {
            int quantity = 2;
            display(quantity);
            displayPrice(quantity *  5);
        }

日志猫:

08-02 11:58:00.775 25553-25553/com.example.android.justjava E/AndroidRuntime: 致命异常: main ****进程:com.example.android.justjava,PID:25553 java.lang.IllegalStateException:无法在父或祖先上下文中找到方法 order(View) 为 android:onClick 属性定义在视图类 android.support.v7.widget.AppCompatButton 与 id 'next_button'**** 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.resolveMethod(AppCompatViewInflater.java:327) 在 android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:284) 在 android.view.View.performClick(View.java:5233) 在 android.view.View$PerformClick.run(View.java:21209) 在 android.os.Handler.handleCallback(Handler.java:739) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:152) 在 android.app.ActivityThread.main(ActivityThread.java:5497) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

  • 你把订单功能放在哪里了。
  • 请发布您的所有活动代码

标签: java android xml


【解决方案1】:

我感觉它的问题很简单,请确保您致电public void order(View view),在您使用setContentView(R.layout.main); 扩展布局的地方

ma​​in.xml

  <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" > 
    <!-- your button -->
    <Button
        android:id="@+id/next_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="submit"
        android:layout_marginTop="16dp"
        android:onClick="order"/>
     <!--other view goes here ..... -->

    </LinearLayout>

java代码

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

public void order(View v){
// make toast only to testing , then add your method later 
}

【讨论】:

    【解决方案2】:

    从 xml 中删除行 android:onClick="order" 并从活动中删除 order 方法。

    将此代码放入您的 OnCreate Activity 方法中。

    Button btnNext = (Button) findViewById(R.id.next_button);
    btnLogin.setOnClickListener(new OnClickListener() {
    
                @Override
                public void onClick (View v) {
                   int quantity = 2;
                   display(quantity);
                   displayPrice(quantity *  5);
                }
            });
    

    【讨论】:

      【解决方案3】:

      将此示例用于按钮控制:

      public class MainActivity extends ActionBarActivity {
      Button b1;
      
       @Override
       protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
      
        b1=(Button)findViewById(R.id.button);
        b1.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
              Toast.makeText(MainActivity.this,"YOUR MESSAGE",Toast.LENGTH_LONG).show();
           }
        });
       }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-24
        • 1970-01-01
        • 2016-01-09
        • 1970-01-01
        • 2017-12-02
        • 1970-01-01
        相关资源
        最近更新 更多