在MainActivity中找不到onClick方法,而它已实现

时间:2014-03-30 15:04:46

标签: android animation onclick

我在我的Android应用程序中有一个ImageView,我想制作一个动画,我点击它。

这是我的XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >

<ImageView
    android:id="@+id/card_image_view"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_toRightOf="@+id/textView1"
    android:clickable="true"
    android:onClick="onCardClicked"
    android:src="@drawable/card" />

这是我的java代码:

package com.example.androidpart;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Log.v("hello", "Hello coucou!");
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    void onCardClicked(View view) {
        Log.v("oh!", "I clicked!");
        view = (ImageView) findViewById(R.id.card_image_view);
        // Using hardware layer
        view.animate().translationX(400); 
    }

}

问题是当我运行它时应用程序停止了,而在logcat中它表示在MainActivity.java中找不到onCardClicked方法,而它就在这里......

有人可以解释问题出在哪里吗?

4 个答案:

答案 0 :(得分:3)

将onCardClicked更改为公开

   public void onCardClicked(View view) {
    Log.v("oh!", "I clicked!");
    view = (ImageView) findViewById(R.id.card_image_view);
    // Using hardware layer
    view.animate().translationX(400); 
}

答案 1 :(得分:2)

方法必须是公开的

public void onCardClicked(View view) {
    Log.v("oh!", "I clicked!");
    view = (ImageView) findViewById(R.id.card_image_view);
    // Using hardware layer
    view.animate().translationX(400); 
}

作为Developer.android Button

中的文档
  

为了使[点击事件]有效,该方法必须为public并接受View作为其唯一参数

答案 2 :(得分:1)

View.onClick的正确签名是

public void onClick(View view)

所以你方法的签名必须是

 public void onCardClicked(View view) 

答案 3 :(得分:0)

您可以考虑使用以下代码手动执行侦听器:

ImageView img = (Button) findViewById(R.id.card_image_view);  
    img.setOnClickListener(new OnClickListener() {  
        public void onClick(View v) {  
            Log.v("oh!", "I clicked!");
        }  
    });

这种方式可能会在将来阻止运行时出现更多问题