所以我有一个Activity(让我们称之为A)与一个视图寻呼机和3个片段,其中一个片段(让我们称之为片段A)加载一个列表。此列表的onclickitem列表将触发对活动(A)的回调,因此它会使用新片段(也是B)启动新活动(让我们称之为B):
带有列表的片段(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);
}
活动(B)中加载的布局包含指向Fragment(B)类的fragment标记 Activity(B)调用片段(B)方法updateProcess():
public void updateProcess(MyProcessDTO process){
nrProcTV.setText(process.getNrprocesso());
tipoTV.setText(process.getVariante());
}
但由于某些原因,这些textview为null。它们是在片段(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方法?
的问候,
答案 0 :(得分:3)
textViews为null,因为您在片段通过onViewCreated()之前访问它们。您可以通过让Activity在Fragment中设置一个字段来解决您的问题,并让Fragment在其onViewCreated方法中使用该字段来查看.setText。