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

时间:2019-04-01 20:40:07

标签: java android android-fragments android-viewpager

我创建了一个选项卡式Activity,并且必须修改MainActivity类中的某些视图。如何获得从该活动创建的这三个片段中的任何一个的片段?

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

1 个答案:

答案 0 :(得分:0)

在进行片段事务处理时,您可能会考虑自己设置一个ID,随后您也可以使用该ID来检索Fragment

以下是您为即将启动的Fragment进行设置和ID /标记的方法。

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

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

getFragmentManager().findFragmentByTag("FRAGMENT_1");

现在要回答另一个问题,即如何从Fragment类访问Activity的视图组件,您可以采用多种方式。

一个可能的选择是在您的BroadcastReceiver中有一个Fragment,当从您的Fragment收到广播时,可以调用它来更新Activity内部的视图。 。这是一个示例Fragment和一个BroadcastReceiver来解释其背后的想法。

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);

希望有帮助!

相关问题