2015-06-23 102 views
1

我有一個包含2個片段的活動。片段A具有用作搜索字段的TextViews。片段B顯示基於搜索的結果。片段中的TextView值未被清除

我在我的操作欄中有按鈕來清除搜索字段。此按鈕用於該活動,並可從兩個片段中單擊。

這是爲動作按鈕的代碼:

@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); 
} 

與上面的代碼,我返回到第一片段(它不添加到返回堆棧)。但是文字瀏覽不會被清除。

clearAll方法被正確調用,因爲我也清除自定義對象的屬性。然而,文章中的文字留在那裏。我必須再次單擊該按鈕(顯示片段A時),以便清除文本。

這是方法:

public void clearAll() { 
    searchClass.name = ""; 
    searchClass.surname = ""; 

    tvName.setText(null); 
    tvSurname.setText(null); 
} 

我設置null而不是「」,這樣的提示應該再次顯示。

我錯過了什麼?難道是片段沒有顯示,所以它的視圖仍然不可用?

+0

使用 「」,而不是空 –

+0

@AnandSavjani我之前了。它也不起作用。 –

+0

在onResume()方法中使用clearAll方法 –

回答

0

你可以試試這個 -

public void clearAll() { 
    searchClass.name = ""; 
    searchClass.surname = ""; 

    tvName.setText(""); 
    tvSurname.setText(""); 
} 
1

你可以試試這個

tvName.setText(""); 
tvSurname.setText(""); 

取而代之的是

tvName.setText(null); 
tvSurname.setText(null); 
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); 
}