我希望当我点击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"
/>
答案 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);
}
});