我已经阅读了一些关于活动片段通信的帖子,但我的问题是独特的;我会尽可能清楚地说明它,让你明白。在我的应用程序中有一个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(); }
答案 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 ...
如果情况不够明确,请允许我坚持要求您实施methodForGettingEditTextValue
和methodForGettingTextViewValue
。该方法应该通过id访问视图,获取值并返回它。