2017-01-12 7 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タスク'? –

+0

@MayurRavalいいえ、シークバーの進行状況の変更リスナーです。 –

答えて

1

MainActivity

mCustomeView.currentR(integervalue); 
mCustomeView.currentS(integervalue); 
からメソッドを呼び出すこと次に CustomView

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

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

のメソッドを作成します

注:その方法からUIを変更する場合は、必ずそのことを確認してください。メインUIスレッドに表示されます。他の賢明なそれはエラーをスローされます

希望このヘルプ

+0

ありがとう、私は私が探していたものを達成することができました。 (Y) –

0

MainActivity mainActivity = new MainActivity();

アクティビティをインスタンス化しないでください。ビューにコンテキストMainActivityを渡して、それを操作に使用します。 サンプルコンテキストMainActivity

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

Context context = MainActivty.this; 
+0

私はそれを試みましたが、私はビューのコンストラクタでコンテキストを渡していますが、 'setOnChangeListener'を呼び出してそのリスナーを作成することはできません –

関連する問題