Java 将列表从主活动传递到选项卡片段回收视图
我的活动有4个选项卡,每个选项卡都有Java 将列表从主活动传递到选项卡片段回收视图,java,android,android-activity,android-recyclerview,fragment,Java,Android,Android Activity,Android Recyclerview,Fragment,我的活动有4个选项卡,每个选项卡都有RecyclerView。我在MainActivity中获取Json数据,然后将其转换为列表 这里的挑战是将列表传递给每个选项卡中每个片段中的每个RecyclerView。最简单的方法是这样使用: 视图模型: public class SharedViewModel extends ViewModel { private List<Item> list_1= ArrayList<Item>(); private List
RecyclerView
。我在MainActivity
中获取Json数据,然后将其转换为列表
这里的挑战是将列表传递给每个选项卡中每个
片段中的每个RecyclerView
。最简单的方法是这样使用:
视图模型:
public class SharedViewModel extends ViewModel {
private List<Item> list_1= ArrayList<Item>();
private List<Item> list_2= ArrayList<Item>();
public void setList_1(List<Item> list) {
list_1 = list
}
public List<Item> getList_1() {
return list_1 ;
}
public void setList_2(List<Item> list) {
list_2 = list
}
public List<Item> getList_2() {
return list_2 ;
}
}
片段1:
public class Fragment_1 extends Fragment {
private SharedViewModel model;
List<Item> list_1 = new ArrayList<>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
list_1 = model.getList_1();
}
}
公共类片段\u 1扩展了片段{
私有共享模型;
List_1=新的ArrayList();
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
model=ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
list_1=model.getList_1();
}
}
片段2:
public class Fragment_2 extends Fragment {
private SharedViewModel model;
List<Item> list_2 = new ArrayList<>();
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
model = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
list_2 = model.getList_2();
}
}
公共类片段\u 2扩展了片段{
私有共享模型;
List_2=新的ArrayList();
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
model=ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
list_2=model.getList_2();
}
}
但是,更好的方法更复杂。更多的信息在这里您可以考虑在<代码>片段中使用<代码> BurdCaster接收器<代码>。因此,当更新片段列表时,您将从main活动
发送一个广播,该广播将在片段中接收
您只需像这样在片段中注册BroadcastReceiver
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Get extra data included in the Intent
// You might consider sending a list to be passed to the adapter of the RecyclerView.
String data = intent.getStringExtra("data");
// Update your RecyclerView with data.
}
};
在onResume
函数中的Fragment
中注册接收器
@Override
protected void onResume() {
// Register to receive messages.
// We are registering an observer (mMessageReceiver) to receive Intents
// with actions named "update-frag-1-recyclerview".
LocalBroadcastManager.getInstance(this).registerReceiver(
mMessageReceiver, new IntentFilter("update-frag-1-recyclerview"));
super.onResume();
}
并在片段中的onPause
函数中取消注册接收器
@Override
protected void onPause() {
// Unregister since the Fragment is paused.
LocalBroadcastManager.getInstance(this).unregisterReceiver(
mMessageReceiver);
super.onPause();
}
现在,从您的活动
中,当接收到数据并准备好将数据传递给片段时,只需发送相应的广播以供片段接收。我正在展示一个
Intent intent = new Intent("update-frag-1-recyclerview");
// You can also include some extra data.
intent.putExtra("data", "This is some data!");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
这将在您收听来自Fragment1
的事件时触发onReceive
功能。您也可以对其他片段执行相同的操作。请记住,我只发送一个数据,即String
。您可以考虑发送一个列表以及一个额外的内容,以及在片段< /代码>中接收的意图。
@Override
protected void onPause() {
// Unregister since the Fragment is paused.
LocalBroadcastManager.getInstance(this).unregisterReceiver(
mMessageReceiver);
super.onPause();
}
希望有帮助 你能给我们看一些你的代码吗,特别是主要的活动和fragmens实例化?