2013-05-30 110 views
0

大家好, 上午初學者到Android,我有一個疑問在訪問變量。在我的應用程序, 我必須展示從繪製..它已經做.. 上一頁和下一頁的圖片,但我的問題是,它應該根據子類中的圖像在父類中播放視頻,以便我需要訪問父類中的子類變量....是否可能?任何想法..謝謝!如何在父類中訪問子類變量?

// 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(); 
    } 
} 

} 

最後,我想acceess子類變量_imageIds_currentImage在父類........任何想法???

+0

簡單,您可以更改「私人最終整數[] _imageIds」到「公共最後整數[] _imageIds」和訪問作爲_mainView ._imageIds –

回答

0

沒有辦法做到這一點。您可以創建多個子類對象,並且不清楚哪個對象將被訪問的成員。

只有當成員是靜態的,它才能完成。在這種情況下,你可以訪問他們的ClassName.memberName

1

您可以隨時創建,使得在子類的一般的工作,然後重新定義父類的方法父類的方法和你做的_imageIds_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 
    } 
} 
0

我將與一個回調方法,例如創建InterfaceonImageSelcted。事情是這樣的:

public interface OnImageSelectedListener(){ 

    public onImageSelected(String imageName); 

} 

然後implement它的父類:

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); 
}