2017-01-12 38 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); 
      } 
     }); 

} 

但是,這是給我的NullPointerException在

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

這是一個onProgressChanged監聽器內部。

我想問的是,它甚至可以使用Listener從Activity到View發送數據?如果是的話,那麼任何指針將不勝感激。謝謝。

+1

什麼是視圖?解釋 – Spartan

+0

從哪裏'onProgressChanged'調用?形成'Aysnc任務'? –

+0

@MayurRaval不,它是一個seekbar進度更改監聽器。 –

回答

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。它將在主UI線程中。否則它會拋出錯誤

希望這個幫助

+0

謝謝,我能夠實現我正在尋找的內容。 (Y) –

0

MainActivity mainActivity = new MainActivity();

不要實例化活動。將MainActivity上下文傳遞給視圖並使用它執行操作。 樣品上下文

Context context = MainActivty.this; 
+0

我試過了,我無論如何都在視圖的構造函數中傳遞上下文,但是我不能用它調用'setOnChangeListener'並創建一個相同的監聽器, –