6

アプリに 3 つの sherlockListFragments があります。すべてのフラグメントにはいくつかの editTexts があり、最後のフラグメントにはボタンがあり、これを押すと、最初と 2 番目のフラグメントのすべてのデータにアクセスして保存する必要があります。bundle を使用して、フラグメント間でデータを送信しました。次の簡単な例では、これは私の最初のフラグメントのコードです:

public class PersonalDataFragment extends SherlockListFragment {


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragmet_personal_data, container, false);

    return v;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    PersonalDataFragment fragment = new PersonalDataFragment();
    Bundle bundle = new Bundle();
    bundle.putString("y", "koko"); //any string to be sent
    fragment.setArguments(bundle);

    super.onCreate(savedInstanceState);
}

これは、テキストを受け取るフラグメントのコードです。

public class WorkExpRefFragment extends SherlockListFragment  {
String myInt;

@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_workexp_ref, container, false);


    final EditText t = (EditText) view.findViewById(R.id.editText5);
    final Button generate = (Button)view.findViewById(R.id.button2);

    generate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            t.setText(myInt + "sadfigha");
        }
    });
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    Bundle bundle = this.getArguments();
    if(getArguments()!=null) {
        myInt = getArguments().getString("y");
    }

    super.onCreate(savedInstanceState);
}

}

3 番目のフラグメントに null があります。どうすればよいですか? 前もって感謝します

4

1 に答える 1

6

コードが失敗するのは正常です。最初のフラグメントでは、 の新しいインスタンスを作成し、それをデータと共にPersonalDataFragment渡すだけです。Bundle問題は、フラグメント が にデータを保持しているにもかかわらBundleず、フラグメント自体がアプリによって使用されるものではない (にアタッチされていないActivity) ことです。インスタンスにも を設定しBundleますPersonalDataFragmentが、 のデータにアクセスしようとするとWorkExpRefFragment、2 つのフラグメントが直接接続されていないため、明らかに機能しません。

やりたいことの簡単な解決策の 1 つは、すべてのフラグメントで利用できるActivityので、フラグメントのデータを「保存」することです。Activity最初にActivity、3 つのフラグメントを保持する 2 つのメソッドを作成します。

public void saveData(int id, Bundle data) {
    // based on the id you'll know which fragment is trying to save data(see below)
    // the Bundle will hold the data
}

public Bundle getSavedData() {
    // here you'll save the data previously retrieved from the fragments and
    // return it in a Bundle
} 

次に、フラグメントはデータを次のように保存します。

public class PersonalDataFragment extends SherlockListFragment {

   // this will identify the PersonalDataFragment fragment when trying to save data 
   public void static int id PERSONAL_ID = 1; 
   //...

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Bundle bundle = new Bundle();
      bundle.putString("y", "koko"); //any string to be sent
      YourActivity activity = (YourActivity) getActivity();
      activity.saveData(PERSONAL_ID, bundle);
   }    
}

WorkExpRefFragmentフラグメント内のデータを取得するには:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    YourActivity activity = (YourActivity) getActivity();
    Bundle savedData = activity.getSavedData();
}

これらのフラグメントの使用方法によっては、このソリューションが機能しない場合があります。また、Bundle上記のように渡したものは、構成の変更のために保持されないことに注意してください。

于 2013-05-11T17:56:27.237 に答える