2013-05-11 10 views
6

私のアプリケーションに3つのsherlockListFragmentsがあります。すべてのフラグメントにはいくつかのeditTextがあり、最後のフラグメントにはボタンがあります。このボタンを押すと、1番目と2番目のフラグメントのすべてのデータにアクセスして保存する必要があります。 バンドルを使用してフラグメント間でデータを送信しました。単純な以下の例で、 これは私の最初のフラグメントのコードである:フラグメントを別のフラグメントにデータを渡すためにバンドルを使用

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の断片にヌルを持っています、どうすればいいですか? ありがとうございます

答えて

6

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

あなたがしたいことに対する単純な解決策の1つは、Activityがすべてのフラグメントで利用できるように、フラグメントのデータを "保存"させることです。次に、あなたのフラグメントは、このようにデータを保存します

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 
} 

:最初の3つの断片を保持Activityに2つのメソッドを作成

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

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フラグメント内のデータを取得するには

これらのフラグメントをどのように使用したかによっては、この解決策が機能しない可能性があります。また、上記のようにパスしたBundleは設定変更のために保持されません。

+0

あなたの返事をありがとう、それは私のために働くが、私はそれが最初の脆いときに、(3番目の脆弱性で)ボタンが押されていないときにデータを取得する必要があります。創造された。私はそれが構成の変更のために保持されたい。 どうすればいいですか? – Fareed

+0

私はそれを持ってaddTextChanged listinerを作った: ありがとう – Fareed

関連する問題