在Android中自动/动态更新TextView文本

时间:2015-01-13 00:27:30

标签: android textview observer-pattern

我有一个我决定重写的Android应用程序,重写的原因之一是因为我可以根据类中的变量设置10个带有文本集的TextView,例如:

MyClass myClass = new MyClass();
myClass.myNumber = 5;   // inside MyClass - public int myNumber;

LinearLayout mainLayout = (LinearLayout) view.findViewById(R.id.mainLayout);

TextView myTextView = new TextView(getActivity());  //In a fragment
myTextView.setText(String.format("myNumber currently has a value of %d", myClass.myNumber));

mainLayout.addView(myTextView);
return view;

到目前为止,我一直在更改myNumber的按钮/视图上使用.setOnClickListener,当myNumber的值发生变化时再次设置视图文本,然后调用.invalidate()来重绘TextView,这有工作得很好,但我使用这种方法非常重,代码变得非常重复,更改一个整数会影响很多视图(所有视图都使用不同的方式 - 例如不同的措辞或计算(例如myNumber * 2)) 。我想这是因为它在TextView中创建了一个不可变的字符串。

我试图创建一个实现Observer的自定义TextView(使MyClass扩展Observable),并且在更新方法中我可以让它为刷新自身无效,但它仍然具有相同的文本。我也试过创建单个元素数组,试图传递引用而不是值,希望当它被更改然后视图无效时它将获取新值,但文本仍然保持不变。

如何在myNumber的值发生变化时自动更新TextView?某种约束?

1 个答案:

答案 0 :(得分:0)

Bindroid对此非常有用,只是为用户提供的注释,使用示例应用程序使用来自Activity的this的片段,因此调用使用Activity的bind方法,因此在我使用的片段中导致它无法正常工作的getActivity(),在库中挖掘我发现了一个绑定方法,它接受一个View并传入我的view,它在片段中被充气并且效果很好!!!这是非常容易整合btw只是我没有得到它!