我有一个包含2个片段的活动。片段A具有用作搜索字段的TextView。片段B显示基于搜索的结果。
我的操作栏中有按钮可清除搜索字段。此按钮用于活动,可以从两个片段中单击。
这是操作按钮的代码:
user_struct = %{ %User{} | user_map }
user_struct = %{ %User{} | Enum.to_list(user_map) }
使用上面的代码,我返回到第一个片段(它没有添加到backstack)。但是文本视图不会被清除。
正确调用@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//Delete
if (id == R.id.action_delete) {
if (fragmentA != null) {
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentA.clearAll();
}
}
return super.onOptionsItemSelected(item);
}
方法,因为我还清除了自定义对象的属性。但是,textviews中的文本仍然存在。我必须再次单击该按钮(当显示片段A时),以便清除文本。
这是方法:
clearAll
我正在设置public void clearAll() {
searchClass.name = "";
searchClass.surname = "";
tvName.setText(null);
tvSurname.setText(null);
}
而不是“”,以便再次显示提示。
我错过了什么?可能是因为片段没有显示所以它的视图仍然不可用吗?
答案 0 :(得分:1)
您可以尝试
tvName.setText("");
tvSurname.setText("");
而不是
tvName.setText(null);
tvSurname.setText(null);
答案 1 :(得分:0)
你可以试试这个 -
public void clearAll() {
searchClass.name = "";
searchClass.surname = "";
tvName.setText("");
tvSurname.setText("");
}
答案 2 :(得分:0)
为了使其发挥作用,我们进行了以下更改:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
//Delete
if (id == R.id.action_delete) {
if (fragmentA != null) {
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
if (currentFragment == fragmentA ) {
fragmentA.clearAllImmediate();
}
else {
fragmentA.clearAll();
}
}
}
return super.onOptionsItemSelected(item);
}
然后在片段中:
@Override
public void onResume() {
super.onResume();
if (needToClear) {
clearAllImmediate();
needToClear = false;
}
}
public void clearAll() {
needToClear = true;
}
public void clearAllImmediate() {
searchClass.name = "";
searchClass.surname = "";
tvName.setText(null);
tvSurname.setText(null);
}