簡體   English   中英

是否在每個片段的每個NewInstance內調用Activity onCreate?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM