2

したがって、ビューページャーと3つのフラグメントを含むアクティビティ(Aと呼びます)があり、これらのフラグメントの1つ(フラグメントAと呼びます)がリストをロードします。このリストのonclickitemリストは、アクティビティ(A)へのコールバックをトリガーするため、新しいフラグメント(Bも)を使用して新しいアクティビティ(Bと呼びます)を起動します。

インターフェイスとonclickItemListener()を含むリスト付きのFragment(A):

// 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()を呼び出します。

public void updateProcess(MyProcessDTO process){

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

しかし、これらのテキストビューは何らかの理由でnullです。それらはfragment(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()を通過する前にアクセスするため、nullになります。アクティビティでフラグメントにフィールドを設定し、フラグメントがそのフィールドを使用してonViewCreatedメソッドのview.setTextを使用できるようにすることで、問題を解決できます。

于 2012-06-20T16:05:24.993 に答える