Android 如何访问父类中的子类变量?
大家好, 我是android的初学者,我对访问变量有一个疑问。。在我的应用程序中, 我必须显示drawable中的上一个和下一个图像。。这件事已经做完了。。 但我的问题是,它应该根据子类中的图像在父类中播放视频,因此我需要访问父类中的子类变量。。。。是否可能??任何想法。。谢谢Android 如何访问父类中的子类变量?,android,Android,大家好, 我是android的初学者,我对访问变量有一个疑问。。在我的应用程序中, 我必须显示drawable中的上一个和下一个图像。。这件事已经做完了。。 但我的问题是,它应该根据子类中的图像在父类中播放视频,因此我需要访问父类中的子类变量。。。。是否可能??任何想法。。谢谢 // Main class public class TransitionViewExampleActivity extends Activity implements OnClickListener {
// Main class
public class TransitionViewExampleActivity extends Activity implements
OnClickListener {
ImageButton play;
private final int ANIMATION_DURATION_MSEC = 1000;
private Button _leftButton;
private Button _rightButton;
private TransitionView _mainView;
VideoView videoView;
Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.main);
play = (ImageButton) findViewById(R.id.ib_play_btn);
play.setOnClickListener(this);
_leftButton = (Button) findViewById(R.id.buttonLeft);
_rightButton = (Button) findViewById(R.id.buttonRight);
_mainView = (TransitionView) findViewById(R.id.mainView);
_mainView.setVisibility(View.VISIBLE);
}
public void onClick(View v) {
videoView = (VideoView) findViewById(R.id.videoView1);
switch (v.getId()) {
// TODO Auto-generated method stub
case R.id.ib_play_btn:
// Toast.makeText(this, "Please Login to view video",Toast.LENGTH_SHORT).show();
play.setVisibility(View.INVISIBLE);
_mainView.setVisibility(View.INVISIBLE);
_leftButton.setVisibility(View.INVISIBLE);
_rightButton.setVisibility(View.INVISIBLE);
MediaController mediaController = new MediaController(this);
mediaController.setAnchorView(videoView);
videoView.setMediaController(mediaController);
String path = "android.resource://" + getPackageName() + "/" + R.raw.test1;
videoView.setVideoURI(Uri.parse(path));
videoView.start();
break;
}
if (v == _leftButton) {
// fadeIn.setDuration(ANIMATION_DURATION_MSEC);
this.overridePendingTransition(R.anim.slide_in_left,
R.anim.slide_out_right);
_mainView.changePage(false);
} else if (v == _rightButton) {
this.overridePendingTransition(R.anim.slide_in_right,
R.anim.slide_out_left);
_mainView.changePage(true);
}
}
}
// Sub class (Child class)
class TransitionView extends RelativeLayout {
/** One of the two in-memory art images */
private ImageView _artView1;
/** The other of the two in-memory art images */
private ImageView _artView2;
/** Length of art view transition animation, in milliseconds */
private final int ANIMATION_DURATION_MSEC = 1000;
/** The underlying ImageSwitcher that performs transitions */
private ImageSwitcher _imageSwitcher;
/** Index into _imageIds array */
private int _currentImage = 0;
/** All available art image resource ids */
private final Integer[] _imageIds = { R.drawable.thuppaki,
R.drawable.gouravam, R.drawable.splash2, R.drawable.pic04 };
Animation fadeIn, fadeOut;
Context context;
public TransitionView(Context context) {
super(context);
customInit(context);
}
private void customInit(Context context) {
_imageSwitcher = new ImageSwitcher(context);
_imageSwitcher.setInAnimation(fadeIn);
_imageSwitcher.setOutAnimation(fadeOut);
_artView1 = new ImageView(context);
_artView1.setImageResource(_imageIds[_currentImage]);
_artView2 = new ImageView(context);
_artView2.setImageResource(_imageIds[_currentImage + 1]);
LayoutParams fullScreenLayout = new LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
_imageSwitcher.addView(_artView1, 0, fullScreenLayout);
_imageSwitcher.addView(_artView2, 1, fullScreenLayout);
_imageSwitcher.setDisplayedChild(0);
addView(_imageSwitcher, fullScreenLayout);
}
/** @see android.view.View#View(Context, AttributeSet) */
public TransitionView(Context context, AttributeSet attrs) {
super(context, attrs);
customInit(context);
}
/** @see android.view.View#View(Context, AttributeSet, int) */
public TransitionView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
customInit(context);
}
public void changePage(boolean pageRight) {
_currentImage = (pageRight) ? (_currentImage + 1) : (_currentImage - 1);
if (_currentImage < 0) {
_currentImage = _imageIds.length - 1;
} else if (_currentImage >= _imageIds.length) {
_currentImage = 0;
}
if (_imageSwitcher.getCurrentView() == _artView1) {
_artView2.setImageResource(_imageIds[_currentImage]);
_imageSwitcher.showNext();
} else {
_artView1.setImageResource(_imageIds[_currentImage]);
_imageSwitcher.showPrevious();
}
}
}
//主类
公共类转换ViewExampleActivity扩展活动实现
onclick侦听器{
图像按钮播放;
私有最终整数动画持续时间=1000;
私人按钮_leftButton;
私人按钮_right按钮;
私有转换视图_mainView;
视频视图;
语境;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN\u ORIENTATION\u横向);
setContentView(R.layout.main);
play=(图像按钮)findviewbyd(R.id.ib\u play\u btn);
play.setOnClickListener(这个);
_leftButton=(按钮)findViewById(R.id.buttonLeft);
_rightButton=(按钮)findViewById(R.id.buttonRight);
_mainView=(TransitionView)findViewById(R.id.mainView);
_mainView.setVisibility(View.VISIBLE);
}
公共void onClick(视图v){
videoView=(videoView)findviewbyd(R.id.videoView1);
开关(v.getId()){
//TODO自动生成的方法存根
案例R.id.ib\u播放\u btn:
//Toast.makeText(这是“请登录查看视频”,Toast.LENGTH_SHORT.show();
play.setVisibility(View.INVISIBLE);
_mainView.setVisibility(视图.不可见);
_leftButton.setVisibility(视图不可见);
_rightButton.setVisibility(视图不可见);
MediaController MediaController=新的MediaController(此);
mediaController.setAnchorView(视频视图);
videoView.setMediaController(mediaController);
String path=“android.resource://”+getPackageName()+“/”+R.raw.test1;
setVideoURI(Uri.parse(path));
videoView.start();
打破
}
如果(v==\u左按钮){
//设置持续时间(动画持续时间);
此.overridePendingTransition(左侧的R.anim.slide_,
R.anim.滑出(右);
_mainView.changePage(false);
}else if(v==\u右按钮){
这个。覆盖转换(右侧的R.anim.slide\u,
R.anim.滑出(左);
_mainView.changePage(true);
}
}
}
//小班(儿童班)
类TransitionView扩展了RelativeLayout{
/**两种记忆中的艺术图像之一*/
私有图像视图_artView1;
/**两个记忆中的艺术形象中的另一个*/
私有图像视图_artView2;
/**艺术视图过渡动画的长度(毫秒)*/
私有最终整数动画持续时间=1000;
/**执行转换的底层ImageSwitcher*/
专用图像切换器\u图像切换器;
/**索引到_imageIds数组中*/
私有int_currentImage=0;
/**所有可用的艺术图像资源ID*/
私有最终整数[]_imageIds={R.drawable.thuppaki,
R.drawable.gouravam,R.drawable.splash2,R.drawable.pic04};
动画淡出,淡出;
语境;
公共转换视图(上下文){
超级(上下文);
customInit(上下文);
}
私有void customInit(上下文){
_imageSwitcher=新的imageSwitcher(上下文);
_图像切换器.设置无激励(fadeIn);
_imageSwitcher.setOutAnimation(淡出);
_artView1=新图像视图(上下文);
_artView1.setImageResource(_ImageID[_currentImage]);
_artView2=新图像视图(上下文);
_artView2.setImageResource(_ImageID[_currentImage+1]);
LayoutParams fullScreenLayout=新的LayoutParams(
LayoutParams.FILL\u父级,LayoutParams.FILL\u父级);
_imageSwitcher.addView(_artView1,0,全屏布局);
_imageSwitcher.addView(_artView2,1,全屏布局);
_imageSwitcher.setDisplayedChild(0);
addView(_imageSwitcher,全屏布局);
}
/**@see android.view.view#view(上下文,属性集)*/
公共转换视图(上下文、属性集属性){
超级(上下文,attrs);
customInit(上下文);
}
/**@see android.view.view#view(Context,AttributeSet,int)*/
公共转换视图(上下文、属性集属性、int-defStyle){
超级(上下文、属性、定义样式);
customInit(上下文);
}
公共无效更改页(布尔页右键){
_currentImage=(pageRight)?(\u currentImage+1):(\u currentImage-1);
如果(_currentImage<0){
_currentImage=_imageIds.length-1;
}else if(\u currentImage>=\u imageIds.length){
_currentImage=0;
}
如果(_imageSwitcher.getCurrentView()==_artView1){
_artView2.setImageResource(_ImageID[_currentImage]);
_imageSwitcher.showNext();
}否则{
_artView1.setImageResource(_ImageID[_currentImage]);
_imageSwitcher.showPrevious();
}
}
}
最后,我想访问子类变量\u imageIds和
\u父类中的currentImage……有什么想法吗?没有办法做到这一点。您可以创建子类的多个对象,但不清楚将访问哪个对象的成员
只有在成员是静态的情况下才能执行此操作。在这种情况下,您可以将它们作为ClassName.memberName访问。您可以始终在父类中创建一个方法,使常规工作正常,然后在子类中重新定义父类的方法,并执行
\u ImageId
和\u currentImage
的操作
例如:
class Parent{
void doSomething(){
//your general code
}
}
class Child extends Parent{
@Override
void doSomething(){
super.doSomething(); //calls the parents function
//add the code where you manipulate the variables
}
}
我将使用回调方法创建一个
接口
,例如onimageselected
。大概是这样的:
public interface OnImageSelectedListener(){
public onImageSelected(String imageName);
}
然后在父类中实现它:
public class MyparentClass implements OnImageSelectedListner {
@Override
protected void onImageSelected(String imageName){
playVideo(imageName);
}
childClass.setOnImageSelectedListener(this);
}
public class MyChildClass{
private OnImageSelectedListener listener;
public setOnImageSelectedListener(OnImageSelectedListener listener){
this.listener = listener;
}
// when the image is selected
listernet.onImageSelected(imageName);
}
只需将“private final Integer[]\u imageIds”更改为“public final Integer”