以下代码显示了一个抽象活动(AppActivity),其他活动必须从中扩展。已经定义了一个布局,但只继承了一个圆形按钮(扩展ImageView)。
MainActivity定义了一个自己的布局,其中必须包含前面提到的按钮。查看我当前的结果,Button成功继承并显示,不能为null
然而,附加到此ImageView的onTouchListener()永远不会从透视“MainActivity”调用。注意,如果发生MotionEvent.ACTION_DOWN和UP,我返回true。所以这不能成为原因。有什么建议吗?
包含onTouchListener()的CircleButton(扩展ImageView)的抽象活动
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>
答案 0 :(得分:0)
您在- (IBAction)flagTapped:(id)sender {
_tableView = [[FeedTableViewController alloc] init];
[_tableView presentAlert];
}
中为OnTouchListener
设置了circleButton
。
当您在R.layout.voice_btn_layout
中致电setContentView()
时,您将布局MainActivity
替换为R.layout.voice_btn_layout
。因此,eu.alfred.batterywarnerapp.R.layout.activity_main
中onTouch()
的{{1}}方法未被调用,因为屏幕上显示的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
不同。