我有一个Activity
,其中TabLayout中有两个片段。
在我的Activity
中,有一个静态ArrayList
。
我是我的拳头Fragment
,我们称之为FragmentOne
我有一个RecyclerView
而第二个Fragment
,FragmentTwo
我需要魔法发生。
在FragmentTwo
中,我从我的ArrayList
调用相同的Activity
并向其中添加一个或多个项目。在FragmentOne
中,我也调用相同的ArrayList
并将其值传递给非静态ArrayList
,即RecyclerView
适配器中使用的值。{/ p>
如何在我的第二个notifyDataSetChanged()
中调用FragmentOne
的{{1}} RecyclerView
方法,以便Fragment
更新内容?< / p>
或者有一种更有效的方式将项目发送到我在RecyclerView
中使用的Fragment
ArrayList
?
我的活动:
RecyclerView Adapter
FragmentOne RecyclerView:
public class MainActivity {
TabLayout tabLayout;
ViewPager viewPager;
ViewPagerAdapter viewPagerAdapter;
FragmentOne fragmentone;
// The ArrayList used as FragmentOne RecyclerView's Adapter
public static ArrayList<Contacts> contactsArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fragmentOne = new FragmentOne();
contactsArrayList = new ArrayList<>();
}
}
我唯一需要的是如何在我的第二个片段中调用public class FragmentOne extends Fragment implements View.OnClickListener {
// RecyclerView's adapter
ContactsAdapter ctcAdapter;
// RecyclerView
RecyclerView rvContacts;
public FragmentOne() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_one, container, false);
// RecyclerView
rvContacts = (RecyclerView) view.findViewById(R.id.rvContacts);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
rvContacts.setLayoutManager(linearLayoutManager);
// Here I'm adding the static list from the Main Activity in the adapter
ctcAdapter = new ContactsAdapter(getContext(), MainActivity.contactsArrayList);
rvContacts.setAdapter(ctcAdapter);
return view;
}
}
,之后我向ctcAdapter.notifyDataSetChanged()
添加一个新项目,使第一个片段中的列表显示添加的项目。< / p>
答案 0 :(得分:2)
有很多方法可以做到这一点。一种方法是让FragmentOne
实现一个监听器。类似的东西:
public interface ContactsChangedListener {
void onContactsChanged();
}
public class FragmentOne implements ContactsChangedListener ... {
...
@Override
void onContactsChanged() {
ctcAdapter.NotifyDataSetChanged();
}
}
在FragmentTwo
中,提供一种传递侦听器的方法:
public class FragmentTwo ... {
...
private ContactsChangedListener mContactsChangedListener;
...
public void setContactsChangedListener(
ContactsChangedListener listener) {
mContactsChangedListener = listener;
}
}
然后,在onCreate
的{{1}}中,您可以将其作为接口传递给另一个:
MainActivity
没什么特别的。但它可以解决问题,并保持封装。