[英]Is the Activity onCreate called with each NewInstance of a fragment inside it?
我想用LinkedList中的下一個對象生成一個新的Fragment。
當用戶單擊next
我想將全局引用重新分配給LinkedList中的下一個引用,並使用它創建一個片段。
問題
每次用戶單擊下一步時,即使LinkedList中有5個對象,該對象也只會重新分配給LinkedList中的第二個對象。 .get(1)
我在想的可能原因
因為我在Activity onCreate
LinkedList中獲得了第一個對象
parentFlow.getChildElements().get(0)
當用戶單擊“ Next
,在鏈接列表中將全局引用設置為.get(1)
,但是當.newInstance()
方法時,是否再次調用了父活動onCreate
?
(將全局引用重新分配給.get(0)
導致無休止的循環)
這是片段創建的正確機制嗎? (即Activity.onCreate()-> Fragment.onCreate-> Activity.onCreate())?
碼,
FlowStateActivity.java
public class FlowStateActivity extends AppCompatActivity
implements FlowElementFragment.OnFragmentSelectedListener {
private static final String TAG = FlowStateActivity.class.getName();
private Flow parentFlow;
// Parent Object Containing the LinkedList
private FlowElement fe;
// Global reference used to reassign object to next object in LinkedList
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flow_state);
parentFlow = getIntent().getParcelableExtra("parent");
// Gets the parent object which contains the LinkedList
fe = parentFlow.getChildElements().get(0);
// Assigns fe to the first element in the LinkedList
FlowElementFragment fragment = FlowElementFragment.newInstance(
fe
);
// Replace whatever is in the fragment_container view with this fragment,
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.add(R.id.flowstate_fragment_container, fragment)
.commit();
}
@Override
// User selects NEXT inside the Fragment
public void onNextSelected(View v) {
try {
fe = parentFlow.getChildElements()
.get(
fe.getNext()
);
// Assigns global reference to next element in the LinkedList
FlowElementFragment fgt = FlowElementFragment.newInstance(fe);
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.flowstate_fragment_container, fgt)
.commit();
} catch (IndexOutOfBoundsException e) {
}
}
FlowElementFragment.java
public FlowElementFragment extends Fragment {
public static FlowElementFragment newInstance(FlowElement e) {
Bundle args = new Bundle();
args.putParcelable(FLOW_ELEMENT, e);
FlowElementFragment fragment = new FlowElementFragment();
fragment.setArguments(args);
return fragment;
}
}
是否在每個片段的每個NewInstance內調用Activity onCreate?
沒有。
它只會被調用一次。
沒有。
Fragment具有管理其事件的功能:
onAttached()—當片段已與活動關聯時調用onCreateView()—調用以創建片段的視圖onActivityCreated()—當活動的onCreate()方法已返回時調用
您的密碼
fe = parentFlow.getChildElements() .get( fe.getNext() );
聽起來很不對勁。 大概應該是
fe = fe.getNext();
要不然
fe = parentFlow.getChildElements().get( ++current );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.