2013-05-30 3 views
0

안녕 모두들, 초보자가 안드로이드에, 나는 변수에 액세스하는 하나의 의심이 .. 내 애플에서 나는 drawable에서 이전과 다음 이미지를 보여줄 필요가 .. 이미 완료되었습니다 .. 하지만 내 문제는, 자식 클래스의 이미지에 따라 부모 클래스의 비디오를 재생해야하므로 부모 클래스의 자식 클래스 변수에 액세스해야합니다. 가능한지 여부 어떤 아이디어 .. 고마워!부모 클래스에서 자식 클래스 변수에 액세스하는 방법?

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

} 

마지막으로, 나는 자식 클래스 변수를 _imageIds 및 부모 클래스에서 _currentImage ........ 어떤 생각을 acceess 할 ???

+0

은 단순히 "공공 최종 정수 [] _imageIds"및 _mainView 같은 접근으로 "민간 최종 정수 [] _imageIds"를 변경할 수 있습니다 ._imageIds –

답변

0

이렇게 할 방법이 없습니다. 하위 클래스의 여러 객체를 만들 수 있으며 객체에 액세스 할 지 여부가 명확하지 않은 멤버입니다.

회원이 정적 인 경우에만 수행 할 수 있습니다. 이 경우 ClassName.memberName으로 액세스 할 수 있습니다.

1

일반적인 작업을 수행하는 부모 클래스에서 항상 메서드를 만들고 부모 클래스의 메서드에서 부모 메서드를 재정의하고 _imageIds_currentImage의 조작을 수행 할 수 있습니다 .

예 : I 콜백 방법, 예를 들어 함께 Interface를 만들 것이다

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

onImageSelcted. 이런 식으로 뭔가 : 다음

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); 
} 
관련 문제