[英]onTouchListener() in Android not called after including ImageView from BaseActivity-XML
以下代碼顯示了一個抽象的Activity(AppActivity),其他Activity必須從中擴展。 已經定義了一個布局,但是只繼承了一個圓形按鈕(擴展了ImageView),僅繼承了一個布局。
MainActivity定義了自己的布局,其中必須包含前面提到的按鈕。 查看我當前的結果,成功繼承並顯示了Button,不能為null
但是,從“ MainActivity”的角度永遠不會調用附加到此ImageView的onTouchListener()。 請注意,如果MotionEvent.ACTION_DOWN和UP發生,我將返回true。 因此,這不能成為原因。 有什么建議么?
使用CircleButton的抽象活動(擴展了ImageView),包括onTouchListener()
public abstract class AppActivity extends Activity {
public CircleButton circleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voice_btn_layout);
circleButton = (CircleButton) findViewById(R.id.voiceControlBtn);
circleButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("TOUCH", "");
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ButtonGotPressed();
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
circleButton.ButtonGotReleased();
return true;
}
return false;
}
});
}
從AppActivity擴展的活動
public class MainActivity extends AppActivity implements ICadeCommand {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(eu.alfred.batterywarnerapp.R.layout.activity_main);
}
activity_main.xml(用於MainActivity)
<RelativeLayout .../>
<include layout="@layout/voice_btn_layout" />
</RelativeLayout>
voice_btn_layout.xml(用於AppActivity)
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="80dip"
android:layout_height="80dip"
android:layout_margin="15dip"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true">
<packagename.CircleButton
...
android:scaleType="fitXY"/>
</FrameLayout>
您正在R.layout.voice_btn_layout
為circleButton
設置OnTouchListener
。
在MainActivity
調用setContentView()
時,將布局R.layout.voice_btn_layout
替換為eu.alfred.batterywarnerapp.R.layout.activity_main
。 因此, onTouch()
用於方法circleButton
在AppActivity
不叫,因為circleButton
在屏幕上示出的是不一樣的circleButton
在AppActivity
。
您可以通過在AppActivity
添加額外的一行來測試是否確實如此
public abstract class AppActivity extends Activity {
public CircleButton circleButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.voice_btn_layout);
circleButton = (CircleButton) findViewById(R.id.voiceControlBtn);
circleButton.setVisibility(View.GONE); // ADD THIS LINE
circleButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
...
您應該注意, circleButton
仍然可見,從而表明屏幕上顯示的circleButton
與AppActivity
那個不同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.