使用从 Activity 传递的数据更新片段 UI
Update Fragment UI with data passed from Activity
我的要求:
我的 MainActivity
从其他应用程序接收数据。 MainActivity
列为 shareable
。
现在,我需要将此数据传递给 MainActivity
中的 fragment
并更新 fragment's
textview
.
在 MainActivity.java : 中,我在 handleSendText
方法中处理接收到的数据(URL)。
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);
}
在片段class中:在它的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
留空,所以我必须执行此操作 check.How 我可以做到吗?
3) 此外,从 setArgument
的 documentation,我了解到应该在片段附加到其 activity。那怎么才能体现在Fragment的变化UI?
public void setArguments (Bundle args)
Supply the construction arguments for this fragment. This can only be called before the fragment has been attached to its activity; that is, you should call
it immediately after constructing the fragment. The arguments supplied
here will be retained across fragment destroy and creation.
只需在片段中添加适当的方法,如下所示:
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);
我假设您已经通过 fragmentManager.add(..)
添加了片段,因此片段已经在布局中。
如果这是真的,那么您的 AddTab fragobj = new AddTab()
就没有意义,因为片段已经存在。
您需要在 activity 中存储对该片段的引用,或者使用 fragmentManager.findFragmentById()
或 findFragmentByTag()
。
那就按照赛义德说的去做
我的要求:
我的 MainActivity
从其他应用程序接收数据。 MainActivity
列为 shareable
。
现在,我需要将此数据传递给 MainActivity
中的 fragment
并更新 fragment's
textview
.
在 MainActivity.java : 中,我在 handleSendText
方法中处理接收到的数据(URL)。
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);
}
在片段class中:在它的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
留空,所以我必须执行此操作 check.How 我可以做到吗?
3) 此外,从 setArgument
的 documentation,我了解到应该在片段附加到其 activity。那怎么才能体现在Fragment的变化UI?
public void setArguments (Bundle args)
Supply the construction arguments for this fragment. This can only be called before the fragment has been attached to its activity; that is, you should call it immediately after constructing the fragment. The arguments supplied here will be retained across fragment destroy and creation.
只需在片段中添加适当的方法,如下所示:
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);
我假设您已经通过 fragmentManager.add(..)
添加了片段,因此片段已经在布局中。
如果这是真的,那么您的 AddTab fragobj = new AddTab()
就没有意义,因为片段已经存在。
您需要在 activity 中存储对该片段的引用,或者使用 fragmentManager.findFragmentById()
或 findFragmentByTag()
。
那就按照赛义德说的去做