2017-01-12 34 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'并创建一个相同的监听器, –