[英]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.