我正在使用Viewpager
在3 fragments
之间切换,除了刷新第二个标签(或fragment
)之外,一切正常。在此标签中,我有一张图片,一些是静态Textviews
,一些是动态TextViews
和一些EditText
字段。
每次选择第二个标签页时,所有动态字段都会调用setText()
。 TextView组件和微调器正在刷新并更新其内容,但EditText元素则不会。
我不明白为什么这些字段没有更新。更改标签后,我在notifiyDataSetChanged()
中致电TabsAdapter
。每次我更改标签时都会调用onViewCreated()
。在第二个片段的onViewCreated()
中,我正在更改元素的内容。
这是我片段的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
hA = (HelloAndroidActivity)this.getSherlockActivity();
appState = ((TestApplication)this.getSherlockActivity().getApplicationContext());
final PersistenceHelper pH = new PersistenceHelper(appState);
m = pH.readMitarbeiter(toDisplay);
// Inflate the layout for this fragment
v = inflater.inflate(R.layout.detailfragment, container, false);
if(m==null) {
//If Mitarbeiter is empty
pH.closeDB();
return v;
}
//Inflating Elements
employeeName = (TextView)v.findViewById(R.id.employee_name);
cDate = (TextView)v.findViewById(R.id.department);
currentPlace = (TextView)v.findViewById(R.id.place_label);
comment_text = (EditText)v.findViewById(R.id.comment_text);
reachable = (EditText)v.findViewById(R.id.reachable_text);
state = (Spinner)v.findViewById(R.id.spinner_state);
durchwahl = (EditText)v.findViewById(R.id.durchwahl);
department = (EditText)v.findViewById(R.id.department_edit);
email = (EditText)v.findViewById(R.id.email_edit);
img = (ImageView)v.findViewById(R.id.userPic);
changeData = (Button)v.findViewById(R.id.changeButton);
//Setting Elements
employeeName.setText(m.getL_name());
currentPlace.setText(m.getStatus());
comment_text.setText(m.getBemerkung());
reachable.setText(m.getErreichbar());
email.setText(m.getS_name()+"");
durchwahl.setText(m.getDurchwahl()+"",TextView.BufferType.EDITABLE);
department.setText(m.getFunktion(),TextView.BufferType.NORMAL);
//Spinner
String[] values = { "Anwesend", "Mittagspause" , "Ausser Haus" , "Dienstreise", "Krankenstand" ,"Zeitausgleich", "Urlaub","Abwesend" };
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this.getSherlockActivity(), android.R.layout.simple_spinner_item,values);
state.setAdapter(spinnerArrayAdapter);
state.setSelection(StateMapper.returnState(m.getStatus()));
//Image
//.......
return v;
}
正如我之前提到的,我的Image,TextView和Spinner Elements正在刷新它们的内容。我还检查了所有变量的内容,除了这些EditText元素外,一切似乎都很好。如果我将EditText元素转换为TextView,则内容正在改变(在代码中但不在GUI中)。让我绝望的是,EditText在我第一次设置值时刷新。
有人知道,我如何刷新EditText
字段的内容?
答案 0 :(得分:10)
我不确定,但请尝试onResume()
并将文字设置为恢复状态。
或尝试
关于标签更改的Intent.FLAG_ACTIVITY_CLEAR_TOP。
答案 1 :(得分:1)
您还可以尝试将runnable发布到消息队列,以便在呈现后更新EditText(在MonoDroid / C#中,请参阅How to run a Runnable thread in Android?获取java):
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
EditText et = FindViewById<EditText>(...);
et.Post(() => { et.Text = "content"; });
}
此外,如果您有一个TextChanged事件处理程序(比如在更改文本时显示保存图标/按钮),也可以在runnable中将其发布,并在et.Text分配后执行。否则,TextChanged事件将在分配初始et.Text内容时触发,导致在USER未更改任何内容时触发TextChanged事件(即显示保存按钮):
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle)
{
EditText et = FindViewById<EditText>(...);
et.Post(() =>
{
et.Text = "content";
et.TextChanged += TextChangedHandler;
});
}
private void TextChangedHandler(object o, EventArgs args)
{
ShowSaveButton();
}