2014-04-10 32 views
0

在java/android API中是否有任何“技巧”与static或其他内容同时改变片段中具有相同ID的对象中的文本?在链接片段中“链接”对象的文本

假设我有一个静态的字符串:

private static String buttonText = "Today"; 

每个片段有一个按钮:

Button mButton = (Button) getView().findViewById(R.id.change_button); 
mBotton.setText(buttonText); 

要改变对片段的文字我做的:

buttonText = "Tomorrow"; 
mBotton.setText(buttonText); 

灿我自动将文本更改为其他片段?保持List<Button>我的唯一方法(循环列表并设置每个文本)?

+1

你知道“观察者模式” - > http://developer.android.com/reference/java/util/Observer.html – Fildor

+0

@Fildor Nope。现在看。使用昂贵吗? – Diolor

+0

不,它不贵。 [Observable](http://developer.android.com/reference/java/util/Observable.html)类为您提供了所需的大部分内容。 – Fildor

回答

0

也许这正是你所需要的:http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

您可以构建一个适合你,这需要一个完美的Oberserver的行为。

  1. 您创建一个接口,我们称之为OnButtonTextChangeListener定义的方法void onButtonTextChangeWanted(String buttontext)

  2. 你有你的活动实现这个接口和你的片段确保活动它们加入到这样做。 (全部在链接文章中描述) 在该实现中,您更改了包含按钮文本的Activity的成员,然后通知所有已注册的更改片段,例如通过调用片段上的方法changeButtonText(buttontext)来完成在你的问题中写道:改变那​​个片段上的按钮。通过这种方式,您可以通过附加的活动将channge分发给所有片段。

可能有更好的解决方案。我的Android有点生锈...

+0

您的“观察者模式”解决方案很好。我创建了自己的类来扩展'Button'类并实现'Observer'。我将每个按钮添加到一个'ObservedObject'类中,该类扩展了Observable并具有公共方法setValue(String value){setChanged(); notifyObservers(值); }'。当我想要改变这个值时,我调用了'setValue'。所有的片段总是“在那里”(=创建),所以我不必担心nullPointers。 – Diolor