使用从 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) 此外,从 setArgumentdocumentation,我了解到应该在片段附加到其 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()

那就按照赛义德说的去做