我的要求:
我的MainActivity
从其他应用收到数据。 MainActivity
列为shareable
。
现在,我需要将此数据传递到fragment
中的MainActivity
并更新fragment's
textview
。
在 MainActivity.java:这里,我正在handleSendText
方法处理收到的数据(这是一个网址)。
if (Intent.ACTION_SEND.equals(action) && type != null) {
if ("text/plain".equals(type)) {
handleSendText(intent); // Handle text being sent
}
}
}
在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);
}
在 Fragment类中:在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
的{{3}}开始,我了解到应该在片段附加到其活动之前调用它。那我怎样才能反映片段UI的变化呢?
public void setArguments(Bundle args)
提供此片段的构造参数。这只能在片段附加到其活动之前调用;也就是说,你应该打电话 它在构建片段后立即生效。提供的论据 这里将保留片段销毁和创建。
答案 0 :(得分:3)
只需在片段中添加适当的方法,如下所示:
public void receiveURL(String input){
//to handle what you want to pass to the fragment
}
在您的mainActivity调用中,您可以执行以下操作:
YourFragment fragment = (YourFragment)getSupportFragmentManager.findFragmentById(R.id.your_fragment);
fragment.receive(sharedUrl);
答案 1 :(得分:2)
我假设您已经通过fragmentManager.add(..)
添加了片段,因此片段已经在布局上了。
如果这是真的,那么你的AddTab fragobj = new AddTab()
毫无意义,因为片段已经存在。
您需要在活动中存储对此片段的引用,或使用fragmentManager.findFragmentById()
或findFragmentByTag()
。
然后按照Saeed的说法