2

所以我有一个带有视图寻呼机和 3 个片段的 Activity(我们称之为 A),其中一个片段(我们称之为片段 A)加载一个列表。此列表的 onclickitem 列表将触发对活动(A)的回调,因此它会启动一个带有新片段(B 也是)的新活动(我们称之为 B):

带有列表的 Fragment(A),包含接口和 onclickItemListener():

// Container Activity must implement this interface
public interface onProcessSelectedListener{

    public void onMyProcessSelected(MyProcessDTO process);
}

actualListView.setOnItemClickListener(
                new OnItemClickListener() {

                    @Override
                    public void onItemClick(AdapterView<?> parent, View view,
                            int position, long id) {

                        IpdmsMobileMenuItemListDTO dto=(IpdmsMobileMenuItemListDTO) parent.getItemAtPosition(position);

                        if(getView().findViewById(R.id.myprocessdetail)!=null)
                            updateProcess((MyProcessDTO) dto.getDto());
                        else{

                            mListener.onMyProcessSelected((MyProcessDTO) dto.getDto());
                        }
                    }
                });

如果布局未显示特定视图,它将在包含此片段的视图寻呼机的 Activity(A) 上启动回调方法:

@Override
public void onMyProcessSelected(MyProcessDTO process) {

    Intent showContent = new Intent(getApplicationContext(),MyProcessDetail.class);
    showContent.putExtra("Process", process);
    startActivity(showContent);
}

这将调用新活动(B):

@Override
public void onCreate() {

    this.setTheme(getThemeId());
    super.onCreate(bundle);

    //get extras from bundle
    extras = getIntent().getExtras();
    //requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

    setContentView(getLayoutId());

    MyProcessDTO process= (MyProcessDTO) extras.get("Process");

    //get fragment
    MyProcessDetailsFragment contentProcess= (MyProcessDetailsFragment) getSupportFragmentManager()
    .findFragmentById(R.id.view_fragment);

    contentProcess.updateProcess(process);
}

Activity(B)中加载的布局,包含指向Fragment(B)类的fragment标签Activity(B)调用fragment(B)方法updateProcess():

公共无效更新进程(MyProcessDTO 进程){

    nrProcTV.setText(process.getNrprocesso());
    tipoTV.setText(process.getVariante());
}

但是由于某种原因,这些文本视图为空。它们在片段(B)的 onActivityCreated 方法上初始化。:

@Override
public void initializeFragment(Bundle savedInstanceState) {

    super.initializeFragment(savedInstanceState);

    nrProcTV=   (TextView) getView().findViewById(R.id.nrprocesso_value);
    tipoTV= (TextView) getView().findViewById(R.id.tipoprocesso_value);

}

为什么在调用 updateProcess 方法之前没有执行 onActivityCreated 方法??

问候,

.

4

1 回答 1

3

textViews 为空,因为您在片段通过 onViewCreated() 之前访问它们。您可以通过让 Activity 在 Fragment 中设置一个字段来解决您的问题,并让 Fragment 在其 onViewCreated 方法中使用该字段来查看.setText。

于 2012-06-20T16:05:24.993 回答