2017-01-12 18 views
0

안녕하세요 저는 사용자 정의보기의 주 활동에서 실시간 데이터 변경을 시도하고 있습니다. 뷰의 리스너를 구현하여 주 활동이 변경 될 때마다 내 뷰에서 그에 대한 정보를 얻고 그에 따라 작동하도록합니다.사용자 정의보기의 주 활동 수신기?

다음은 나의 주요 활동에 있습니다.

public void setChangeListener(OnChangeListener onChangeListener){ 
    this.onChangeListener = onChangeListener; 
} 

public interface OnChangeListener{ 
    void currentRadius(int r); 
    void currentSpeed(int s); 
} 

나는, 같은보기에 같은

public CustomView extends View{ 

//CONSTRUCTORS 

//EVERYTHING ELSE 

    //These are inside the init(Context context) method. 
    MainActivity mainActivity = new MainActivity(); 
     mainActivity.setOnChangeListener(new MainActivity.OnChangeListener() { 
      @Override 
      public void currentR(int r) { 
       Log.d("R", ""+r); 
      } 

      @Override 
      public void currentS(int s) { 
       Log.d("S", ""+s); 
      } 
     }); 

} 

초기화가 그러나 이것은 onProgressChanged 수신기 내부에

onChangeListener.currentR(//INTEGER VALUE); 
onChangeListener.currentS(//INTEGER VALUE); 

에서 나에게 NullPointerException이 제공된다.

내가 듣고 싶은 것은 액티비티에서보기까지 리스너를 사용하여 데이터를 보낼 수 있다는 것입니다. 그렇다면 어떤 포인터라도 감사 할 것입니다. 감사.

+1

무엇입니까보기? – Spartan

+0

어디에서'onProgressChanged' 호출을할까요? 'Aysnc Task'를 만드시겠습니까? –

+0

@MayurRaval 아니요, 검색 바 진행 변경 리스너입니다. –

답변

1

MainActivity

CustomView mCustomeView = new CustomView(this); // or Resource id 

CustomView

 public void currentR(int r) { 
      Log.d("R", ""+r); 
     } 

     public void currentS(int s) { 
      Log.d("S", ""+s); 
     } 

에서 생성 메소드의 메소드에서 MainActivity

mCustomeView.currentR(integervalue); 
mCustomeView.currentS(integervalue); 

참고 : 해당 방법에서 UI를 변경하는 경우 반드시 확인하십시오. Main UI Thread에 있습니다. 다른 현명한 그것이 오류를 던질 것입니다

희망이 도움말

+0

덕분에 내가 원하는 것을 얻을 수 있었다. (와이) –

0

MainActivity mainActivity = new MainActivity();

활동을 인스턴스화하지 마십시오. MainActivity 컨텍스트를보기에 전달하고이를 사용하여 작업을 수행하십시오. 이어서 호출 샘플 콘텍스트

Context context = MainActivty.this; 
+0

그걸 시도했는데 어쨌든 뷰의 생성자에서 컨텍스트를 전달하고 있지만 setOnChangeListener를 호출하여 동일한 리스너를 만들 수는 없다. –