2012-03-28 48 views
0

有什么方法可以从代码手动调用监听器吗?Android:从java代码手动调用监听器

更多背景信息:我使用微调和DatePicker。通过Spinner,你可以选择留在家中的一个理由(也许你生病了,也许你有假期),用DatePicker你可以选择日期多久,你将无法使用。有了这两条信息,我为TextView建立了一个字符串,并以紧凑的方式显示相同的数据。字符串的构建过程由一些监听器设置,这些监听器识别两个控件之一的变化并构建和设置新的字符串。 如果我启动程序并从服务器读取一些数据,字符串将不会生成(显然,因为没有更改,也没有监听器会被调用)。

解决方法是在我自己的onLoaddata()方法中构建字符串。但我认为这会更顺利地调用一个监听器为我创建字符串。如果我只是做一些假冒.updateDate,我也可以“打电话”给听众,但我不认为这是一个好主意,创建无用的电话...

也许有人对我有好的暗示?

+0

你自己的方法来加载数据是最好的选择 - 该代码会更清晰。 – 2012-03-28 07:28:36

+0

当然代码会更清晰,但我必须再次编写相同的代码(并且如果没有必要,我不想编写相同的代码两次或更多),我不想讨论解决方法,因为它们没有问题,我想知道是否有方法来调用监听器! – sandkasten 2012-03-28 08:02:12

+0

你不需要编写相同的代码两次 - 使用一种方法来更新你的TextView并从任何你想要的地方调用它,不管它是监听器的回调函数还是onCreate(..) – 2012-03-28 08:08:37

回答

0

使用以下模式

public class YourActivity extends Activity implements OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ... 

     // Some initialization here 
     findViewById(R.id.some_button).setOnClickListener(this); 

     ... 

     // Here you want to update your view 
     updateTextView(); 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 

     case R.id.some_button: 
      // Here you also want to update your view 
      updateTextView(); 
      break; 

     ... 

     } 
    } 

    private void updateTextView() { 
     // Here you update your view 
     ... 
    } 
} 
+0

感谢您的工作,但在搜索调用侦听器之前,我已经提到过。我知道我可以在我的活动中创建一个方法并将其称为侦听器,这也是一种解决方法。我不想以另一种方式讨论“为什么”或“如何”做。我寻找一种方法来调用这个监听器,是否有可能?我错过了一个像'update'这样的调用监听器的方法。 – sandkasten 2012-03-28 11:48:50

+0

是的,你可以调用监听器,它在上面的模式中是'YourActivity'。 **确切地说,'YourActivity' =监听器。**所以,你甚至可以调用这个监听器的'onClick(View)'回调方法。但是你想要做的是间接调用相同的回调方法** **:通过编程实现点击(在你的情况下是updateDate),只是为了获得调用的回调方法。当你不认为创建无用的呼叫是个好主意时,这是否合理? – 2012-03-28 12:13:27

+0

* plonk *今天不是我的一天...好吧,我现在明白了,哦,伙计......感谢您的耐心=) – sandkasten 2012-03-28 12:26:15