2016-08-02 26 views
-1

Ich habe zwei Aktivitäten, die jeweils ein Fragment halten. Ich habe die Daten (einfache Zeichenfolge) zwischen dem ersten fragmrnt zu der zweiten Aktivität gesendet, aber ich kann es nicht von der Aktivität an das zweite Fragment senden. Was mache ich falsch?Senden Sie Daten zwischen zwei Fragmenten

Dies ist die Aktivität, die die Daten erhalten:

public class DiaryActivity extends AppCompatActivity { 

private FragmentManager manager = getSupportFragmentManager(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_diary); 
    if(savedInstanceState == null){ 
     manager.beginTransaction().add(new EditDiaryFragment(), "tag").commit(); 
    } 


} 

@Override 
protected void onResume() { 
    super.onResume(); 
// get the data and pass it to the fradment... not working :(
    Intent intent = getIntent(); 
    String date = intent.getStringExtra("date"); 
    String diary = intent.getStringExtra("diary"); 

    Bundle bundle = new Bundle(); 
    bundle.putString("date", date); 
    bundle.putString("diary", diary); 

    EditDiaryFragment editDiaryFragment = new EditDiaryFragment(); 
    editDiaryFragment.setArguments(bundle); 
} 


} 

Und das ist das Fragment, die die Daten erhalten müssen:

public class EditDiaryFragment extends Fragment implements View.OnClickListener { 

private EditText diaryEditText; 
private Button diarySaveButton; 
private TextView diaryDateText; 
private String today; 
private ShvizoutDBHelper helper; 
private StringBuffer buffer; 


public EditDiaryFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    helper = new ShvizoutDBHelper(getContext()); 


} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View v = inflater.inflate(R.layout.fragment_edit_diary, container, false); 
    diaryDateText = (TextView) v.findViewById(R.id.diaryDateText); 
    diarySaveButton = (Button) v.findViewById(R.id.diarySaveButton); 
    diaryEditText = (EditText) v.findViewById(R.id.diaryEditText); 

    diarySaveButton.setOnClickListener(this); 

    Bundle bundle = getArguments(); 
    if(bundle != null){ 
     String bDate = bundle.getString("date"); 
     String bDiary = bundle.getString("diary"); 

     diaryDateText.setText(bDate); 
     diaryEditText.setText(bDiary); 
    } 

    return v; 
} 


} 

Dank !!

+0

Versuchen in den Debug-Modus laufen zu lassen, um zu sehen, wo die Daten verloren geht. Wenn alles andere fehlschlägt, verwenden Sie EventBus. – Vucko

+0

offensichtlich haben Sie zwei Instanzen von 'EditDiaryFragment' eine mit Argument und Sekunde ohne ... und Sie tun nichts mit dem mit Argumenten – Selvin

+0

mm ... wie kann ich es beheben? Ersetzen Sie das Fragment mit dem Manager? – Roish

Antwort

0

Sie müssen Ihre Tätigkeit gleiche EditDiaryFragment Instanz hinzuzufügen, nachdem Ihr Bündel hinzu:

EditDiaryFragment editDiaryFragment = new EditDiaryFragment(); 
editDiaryFragment.setArguments(bundle); 
getSupportFragmentManager.beginTransaction().add(editDiaryFragment, "tag").commit(); 
+0

Ich habe das schon versucht. funktioniert nicht :( – Roish