我的要求:
My MainActivity
从其他应用程序接收数据。MainActivity
被列为shareable
.
现在,我需要将此数据传递给fragment
in MainActivity
并更新fragment's
textview
.
In MainActivity.java:在这里我正在处理接收到的数据(这是一个 URL)handleSendText
method.
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
}
}
}
In handleSendText
,我正在尝试创建一个包并将该数据传递到我的片段。
void handleSendText(Intent intent) {
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
if (sharedText != null) {
Bundle bundle = new Bundle();
bundle.putString("url", sharedText);
// set Fragmentclass Arguments
AddTab fragobj = new AddTab(); //AddTab() is my Fragment class's name
fragobj.setArguments(bundle);
}
In 片段类:在它的 onCreateView() 中
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
...
//some code
Bundle bundle = this.getArguments();
if(bundle!=null) {
String sharedUrl = getArguments().getString("url");
textBox.setText(sharedUrl);
inflater.inflate(R.layout.fragment_add, container, false);
// to update the UI to reflect changes, I'm trying the
// above line. Is it right?
}
1)问题是控件永远不会到达内部if
循环,这意味着bundle
总是会回来NULL
.
2)此外,如果我没有收到其他应用程序的数据。我想离开我的editText
空,所以我必须执行此检查。我怎样才能做到这一点?
3)此外,从setArgument
's 文档 http://developer.android.com/reference/android/app/Fragment.html#setArguments(android.os.Bundle),我了解到应该在片段附加到其活动之前调用它。那么如何将变化反映到Fragment的UI中呢?
公共无效setArguments(捆绑参数)
提供该片段的构造参数。这只能在片段附加到其活动之前调用;也就是说,你应该打电话
构建片段后立即执行。提供的参数
这里将在片段销毁和创建过程中保留。