繁体   English   中英

我在哪里可以找到片段的ID。 如何从MainActivity类访问片段视图?

[英]Where can I find ID of a fragment. And how can I get access to the view of a fragment from MainActivity class?

我创建了一个选项卡式Activity ,我必须修改MainActivity类中的一些视图。 如何访问从该Activity创建的这三个片段中的任何一个?

我知道涉及使用getFragmentManager().findFragmentById(R.id.example_fragment);的方法getFragmentManager().findFragmentById(R.id.example_fragment); ,但我不知道在哪里可以找到片段ID。

在执行片段事务时,您可以考虑自己设置id,稍后您也可以使用该ID检索Fragment

以下是为正在启动的Fragment设置和标识/标记的方法。

getFragmentManager().beginTransaction().add(R.id.fragment_container, new YourFragment(), "FRAGMENT_1").commit();

现在,您可以使用id(即标记)检索Fragment ,如下所示。

getFragmentManager().findFragmentByTag("FRAGMENT_1");

现在回答您的另一个问题,即如何从Activity类访问Fragment的视图组件,您可以通过多种方式执行此操作。

这样做的一种可能的选择是有一个BroadcastReceiver在您的Fragment可以被调用来更新内部意见Fragment ,而广播是从您收到Activity 这是一个带有BroadcastReceiver的示例Fragment ,用于解释背后的想法。

public class YourFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);

        // Start listening for the broadcast sent from the Activity
        LocalBroadcastManager.getInstance(getActivity()).registerReceiver(mYourBroadcastReceiver, new IntentFilter("MESSAGE_FROM_ACTIVITY"));

        return inflater.inflate(R.layout.your_fragment_layout, null, true);
    }

    @Override
    public void onDestroyView() {
        // The BroadcastReceiver must be destroyed when your Fragment is being destroyed
        LocalBroadcastManager.getInstance(getActivity()).unregisterReceiver(mYourBroadcastReceiver);
    }

    private final BroadcastReceiver mYourBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            // This will be invoked when a broadcast is received from your Activity
            // Update your views here
        }
    };
}

现在,在需要时从您的Activity发送广播。

Intent intent =new Intent("MESSAGE_FROM_ACTIVITY");
sendBroadcast(i);

希望有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM