我创建了一个选项卡式Activity
,并且必须修改MainActivity
类中的某些视图。如何获得从该活动创建的这三个片段中的任何一个的片段?
我知道涉及使用getFragmentManager().findFragmentById(R.id.example_fragment);
的方法,但是我不知道在哪里可以找到片段ID。
答案 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);
希望有帮助!