2016-04-19 27 views
0

私はここで活動 - 断片通信に関していくつかの記事を読みましたが、私の問題はユニークです。私はあなたが理解できるようにできるだけ明確に述べるようにします。私のアプリでは、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()。 }

答えて

0

タブレイアウト内のアクティブなフラグメントを追跡してから、フラグメントのクラスを確認し、どちらがどちらであるかによって、TextViewの内容を返すメソッドを呼び出すか、 EditText

現在のフラグメントを追跡するには、check out this question

あなたはIntentあなたはcurrentFragmentが更新され、次の2つのフラグメントのそれぞれに必要なメソッドを実装したことをされていると仮定すると、このような何かをしたいを作成する前には、その部分は、onNavigationItemSelected実装の内部で、ソートしたら:

//Inside the onNavigationItemSelected 
String value = ""; 
if(currentFragment instanceof MyCustomFragment1){ 
    value = ((MyCustomFragment1)currentFragment).methodForGettingTextViewValue(); 
}else if(currentFragment instanceof MyCustomFragment2){ 
    //This one has the edittext 
    value = ((MyCustomFragment2)currentFragment).methodForGettingEditTextValue(); 
} 
//Then create the intent 
//Intent shareIntent ... 

ケースでは、私はあなたがmethodForGettingEditTextValuemethodForGettingTextViewValueを実装する必要があるだろうと主張しましょう、十分に明確ではありません。このメソッドはidでビューにアクセスし、値を取得してそれを返します。

+0

私は自分の投稿を更新しました。アルゴリズムを提供してくれてありがとう、私は自分自身でコードを修正しなければなりませんでしたが、 – Kira

関連する問題