私はここで活動 - 断片通信に関していくつかの記事を読みましたが、私の問題はユニークです。私はあなたが理解できるようにできるだけ明確に述べるようにします。私のアプリでは、Mainactivityとスライディングタブレイアウトにある2つのフラグメント(これらをfragment1とfragment2と呼ぶ)があります。メインアクティビティにはナビゲーションドロワが含まれ、fragment1にはTextViewが、その他のフラグメント2にはEditTextが含まれています。 Heresの問題は今、shareというdrawerのオプションがあります: - クリックすると、Fragment1のTextviewの文字列値にアクセスするか、Fragment2のEditTextの値にアクセスします。どのフラグメントがタブレイアウトでアクティブであるかによって異なります。今私は文字列の値をテキストメッセージのインテントの引数に渡して、ユーザーが選択したクライアントと共有できるようにします。主な活動2つの断片からデータを取得
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_share) {
//Inside the onNavigationItemSelected
String value = " ";
Fragment currentFragment= getActiveFragment();
if(currentFragment instanceof SpeechToText){
value = ((SpeechToText)currentFragment).getText1();
}else if(currentFragment instanceof TTS){
//This one has the edittext
value = ((TTS)currentFragment).getText2();
}
//Then create the intent
//Intent shareIntent ...
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT,value);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Message");
startActivity(Intent.createChooser(shareIntent, "Share via"));
}
私はあなたがタブレイアウト内の現在アクティブなフラグメントを返すために提供ポストからこの機能を持っています。
public Fragment getActiveFragment() {
if (getSupportFragmentManager().getBackStackEntryCount() == 0) {
return null;
} String tag = getSupportFragmentManager().getBackStackEntryAt(getSupportFragmentManager().getBackStackEntryCount() - 1).getName();
return getSupportFragmentManager().findFragmentByTag(tag);
}
IがFragment1あるSpeechToText断片中methodForGettingTextViewValue()の実装を持っている: パブリックストリングgetText1(){ 戻りresultTEXT.getText()のtoString();。 }
IはmethodForGettingEditTextValueの実装を(有する)Fragment2 公共ストリングgetText2(){ リターンリターンeditText.getText()であるTTS断片のtoString()。 }
私は自分の投稿を更新しました。アルゴリズムを提供してくれてありがとう、私は自分自身でコードを修正しなければなりませんでしたが、 – Kira