主要活动从2个片段获取数据

时间:2016-04-19 21:34:10

标签: java android android-fragments

我已经阅读了一些关于活动片段通信的帖子,但我的问题是独特的;我会尽可能清楚地说明它,让你明白。在我的应用程序中有一个Mainactivity和2个片段(我们称之为fragment1和fragment2),它们处于滑动标签布局中。主活动包含导航抽屉,fragment1包含TextView,其他fragment2包含EditText。现在有问题,抽屉上有选项叫分享: - 点击它时,我想访问Fragment1的Textview中的字符串值或Fragment2的EditText中的值;取决于tablayout中哪个片段处于活动状态。现在我想将字符串值传递给intent的文本消息参数,以便与用户选择的任何客户端共享它。

map<string, vector<string>*> wordMap;
...
vector<string>* context = new vector<string>();
...
wordMap[word] = context;

我在你提供的帖子中有这个功能,用于在标签布局中返回当前活动片段。

@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"));
    }

我在SpeechToText片段(Fragment1)中实现了methodForGettingTextViewValue():     public String getText1()     {         return resultTEXT.getText()。toString();         }

我在TTS片段中实现了methodForGettingEditTextValue(),这是片段2        public String getText2()     {         return return editText.getText()。toString();     }

1 个答案:

答案 0 :(得分:0)

您需要跟踪标签布局中的活动片段,然后检查片段的类,并根据它是哪一个,调用将返回TextView的内容的方法或那是EditText

跟踪当前片段check out this question

onNavigationItemSelected实施中,在创建Intent之前,您已经对该部分进行了排序,您可以执行此类操作,假设currentFragment正在更新,并且您已经在两个片段中的每个片段中实现了所需的方法:

//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访问视图,获取值并返回它。