我想用LinkedList中的下一个对象生成一个新的Fragment。
当用户点击next
时,我想重新分配对LinkedList中下一个的全局引用,并用它创建一个片段。
问题
每次用户单击下一个时,即使LinkedList中有5个对象,该对象也只会被重新分配给LinkedList中的第二个对象
即。 .get(1)
可能的原因我在想
因为我在活动onCreate
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;
}
}
答案 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 );