0

私はAndroidフラグメントで実験していたので、2つのフラグメントListFragmentとを作成しましDetailFragmentた。問題は、をクリックしてメソッドをListFragment呼び出しDetailFragment、選択したアイテムを表示しListFragmentない場合、結果がに表示されないことですDetailFragment。これがDetailFragmentコードです:

    private static final String DETAIL_FRAG_TAG = "detail_fragment";
private Context appContext = null;
private TextView lblItemDetail = null;
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // inflate the fragment layout
    View rootView = inflater.inflate(R.layout.fragments_detail_fragment, container, false);
    lblItemDetail = (TextView) rootView.findViewById(R.id.lbl_itemDetail);


 //at this point the TextView is not null===>see L0g.i
Log.i(DETAIL_FRAG_TAG, " ---MyDetailFragment---oncreateView()--lblItemDetail =[" +    lblItemDetail + "]");

    // get the fragment activity context
    appContext = this.getActivity();
    return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onActivityCreated(savedInstanceState);

}

/**
 * show the details of the item selected on the listFragment.
 * @param itemDetail - the details of the item selected on ListFragment.
 */
public void showLstItemDetail(String itemDetail) {

    if (lblItemDetail != null) {
        // the View to show Text should not be Null.
        lblItemDetail.setText(itemDetail);
    }

    //at this point calling this method shows 
           that    the `TextView` is Null yet it's 
       initialized in the 
        oncreate() as a class member variable ---why am i 
   getting Null after the `oncreate` is finished.
    Log.i(DETAIL_FRAG_TAG,    "------showItemDetail---------msg=[" + itemDetail + "] txt=[" + lblItemDetail + "]");
}



//when I create an instance of `MYDetailFragment`  and call the method to show the details of item Selected on the `DetailFragment` the `TextView` will be null. Why?

   MYDetailFragment detailFrag = new MyDetailFragment();
   detailFrag.showLstItemDetail("Selected List Item");
4

2 に答える 2

1

有用な情報があれば、フラグメントに関する次のチュートリアルを確認してくださいここをクリック

于 2013-03-01T15:09:35.407 に答える
0

これらの2行の間に:

MYDetailFragment detailFrag = new MyDetailFragment();
detailFrag.showLstItemDetail("Selected List Item");

onCreateView()まだ呼び出されていません。つまり、フラグメント rootView は作成されておらず、TextView はまだ作成されていません。

ビューは、フラグメント トランザクションを使用した後にのみ作成されます。そのフラグメントをレイアウトに配置すると、フラグメントがアクティビティにアタッチされ (onAttach())、さらにいくつかのコールバックの後に onCreateView() が呼び出されます。そうして初めて、それに何かを設定できます。

パラメーターをフラグメントに渡す標準的なグッド プラクティスは、Bundle を使用することです。コード例を見てください:

アクティビティについて:

MYDetailFragment detailFrag = new MYDetailFragment();
Bundle b = new Bundle();
detailFrag.setArguments(b);
b.putString("detail", value);
// then proceed to the fragment transaction

次に、フラグメントで:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate the fragment layout
View rootView = inflater.inflate(R.layout.fragments_detail_fragment, container, false);
lblItemDetail = (TextView) rootView.findViewById(R.id.lbl_itemDetail);
Bundle b = getArguments();
lblItemDetail.setText(b.getString("details"));
于 2013-03-01T15:49:10.197 に答える