2013-10-04 146 views
1

如果我想跟蹤一個int值的一個活動/片段,是這種方法不正確:安卓:保持活動/片段狀態

在佈局XML,具有:

<TextView 
    android:id="@+id/int_id" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:visibility="gone" /> 

在片段的onCreateView或活動的onCreate,有下面的代碼:

TextView intId = (TextView)getView().findViewById(R.id.int_id); 
intId.setText(String.valueOf(<integer_value_to_keep_track_of>)); 

然後,每當我需要在後面的代碼使用int值,做後續訪問它ing:

int accessId = Integer.valueOf(((TextView)getView().findViewById(R.id.detail_column_id)).getText().toString()); 

東西告訴我,這不是保存狀態的最好方法。會宣佈一個班級成員(例如private int accessId)並將其分配更好?謝謝!

回答

0

通常情況下,如果你是裏面onCreateView()你得到的View s表示是FragmentView層次結構的一部分,只有當你膨脹佈局曾經的參考。當您致電infalter.inflate()時,返回一個View實例;層次結構的父級。您可以使用該ViewfindViewById()獲取TextView的參考。

例如:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle SavedInstanceState) {   // TODO Auto-generated method stub  

View view = (View) inflater.inflate(R.layout.me_layout, container,false);  
TextView intId = (TextView)view.findViewById(R.id.int_id);    
return view;  
} 

然後,一旦你得到TextView參考,你可以簡單地做

String text = intId.getText().toString(); 

onCreateView();

+0

如果我需要訪問''的外onCreateView intId' '?我只在用戶在片段中進行選擇時才訪問它。之前,我有'private int accessId'定義爲類成員,並已分配。雖然片段被中斷(例如收到電話),但我仍然發現這種方法存在問題。 –

+0

您可以保存'Fragment'的狀態,然後在中斷後恢復。 – Emmanuel

+0

所以你說的不是使用'TextView',而是定義一個類變量'private int accessId',分配它,並在稍後使用該值?在'FragmentActivity'中,實現'onSaveInstanceState'和'onRestoreInstanceState'? –