Activity onCreate是否在其中的每个NewInstance中调用?

时间:2016-07-24 21:56:46

标签: java android android-fragments

我想用LinkedList中的下一个对象生成一个新的Fragment。

当用户点击next时,我想重新分配对LinkedList中下一个的全局引用,并用它创建一个片段。

问题

每次用户单击下一个时,即使LinkedList中有5个对象,该对象也只会被重新分配给LinkedList中的第二个对象 即。 .get(1)

可能的原因我在想

因为我在活动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;
    }
 }

3 个答案:

答案 0 :(得分:1)

  

使用片段的每个NewInstance调用Activity onCreate   在里面?

没有

它只会被调用一次。

答案 1 :(得分:1)

没有

Fragment具有管理其事件的功能:

onAttached() - 当片段与活动相关联时调用 onCreateView() - 调用以创建片段的视图 onActivityCreated() - 在返回活动的onCreate()方法时调用

答案 2 :(得分:1)

您的代码

fe = parentFlow.getChildElements() .get( fe.getNext() );

听起来非常错误。 可能应该是

fe = fe.getNext();

或者

fe = parentFlow.getChildElements().get( ++current );