片段中的TextView值未被清除

时间:2015-06-23 08:21:02

标签: android android-fragments

我有一个包含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); } 而不是“”,以便再次显示提示。

我错过了什么?可能是因为片段没有显示所以它的视图仍然不可用吗?

3 个答案:

答案 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);
}