带有属性Onclick的膨胀ImageView

时间:2015-12-25 22:17:58

标签: android

我希望当我点击ImageView时会发生两件事情: ImageView更改和Toast的背景必须出现在screnn上,因此我使用Selector imgPressed.xml )将MainActivity中的背景和方法onImageClick更改为发起吐司。 但它向我显示了这个错误: java.lang.IllegalStateException:无法在父级或祖先中找到onImageClick(View)方法用于android的onView属性:在视图类android.widget.ImageView上定义的id为'的'onClick属性imageView'

注意:ImageView存在于名为pause.xml的布局资源文件中。我注意到,当我直接在content_main.xml(MainActivitiy.java的布局)中使用ImageView时,它可以工作,但是当我给pause.xml充气时,它会显示Error。

Code Java:

public class MainActivity extends AppCompatActivity {
    RelativeLayout Rel_main_game;
    View pauseButton;


    public void onImageClick(View view) {
        Toast.makeText(MainActivity.this,"Thank You", Toast.LENGTH_SHORT).show();
    }

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

        LayoutInflater myInflater = (LayoutInflater) getApplicationContext().getSystemService(getApplicationContext().LAYOUT_INFLATER_SERVICE);
        pauseButton = myInflater.inflate(R.layout.pause, null, false);

        Rel_main_game = (RelativeLayout) findViewById(R.id.relativeLayout);
        Rel_main_game.addView(pauseButton);
    }
}

imgpressed.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false">
    <bitmap android:src="@drawable/pauseimg"/>
</item>
<item android:state_pressed="true">
    <bitmap android:src="@drawable/pauseimgclicked"/>
</item>
</selector>

pause.xml:

 <ImageView
        android:onClick="onImageClick"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/imageView"
        android:contentDescription="@string/pauseimgS"
        android:focusableInTouchMode="false"
        android:background="@drawable/imgpressed"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        />

1 个答案:

答案 0 :(得分:1)

您的代码示例似乎不完整。但无论如何,您可以以编程方式定义onclick操作,而不是使用XML属性onClick。您可以通过在充气后在视图上设置OnClickListener来执行此操作,然后从那里调用onImageClick方法:

pauseButton = myInflater.inflate(R.layout.pause, null, false);
pauseButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        onImageClick(v);
    }
});