Android 如何将ArrayList从自定义适配器传递到片段
我创建了一个片段,它依次加载两个带有单独片段(学生和问题)的选项卡。这两个片段是两个列表视图:一个带有学生姓名和复选框,另一个带有一些问题 我想知道从列表视图中检查哪些学生。使用自定义适配器中的ArrayList,我可以很容易地获得这一点。我打电话给“精选学生” 但是现在我想把ArrayList'selectedStudents'和选中的学生一起传递到主片段。但我做不到 这是我的代码: 主要类别:Android 如何将ArrayList从自定义适配器传递到片段,android,android-fragments,android-adapter,Android,Android Fragments,Android Adapter,我创建了一个片段,它依次加载两个带有单独片段(学生和问题)的选项卡。这两个片段是两个列表视图:一个带有学生姓名和复选框,另一个带有一些问题 我想知道从列表视图中检查哪些学生。使用自定义适配器中的ArrayList,我可以很容易地获得这一点。我打电话给“精选学生” 但是现在我想把ArrayList'selectedStudents'和选中的学生一起传递到主片段。但我做不到 这是我的代码: 主要类别: @Override protected void onCreate(Bundle save
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listaAlumnos = (ListView)findViewById(R.id.listViewAlumnosF);
listaCuestiones = (ListView)findViewById(R.id.listViewCuestionesF);
//HERE I WANT TO READ THE ARRAYLIST WITH STUDENTS CHECKED
}
});
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main2, container, false);
return rootView;
}
我的学生片段:
public class StudentsFragment extends Fragment {
ListView listStudentsF;
ArrayList<String> IdAlumnos = new ArrayList<String>();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_alumnos, container, false);
listStudentsF = (ListView)v.findViewById(R.id.listStudentsF);
perform();
}
public void perform() {
myAdapterUsers myAdapterUsers = new myAdapterUsers(getActivity(), R.layout.list_item_alumnos, IdAlumnos);
listStudentsF.setAdapter(myAdapterUsers);
}
}
我已尝试在适配器中创建一个方法,如:
public ArrayList<String> getArrayList() {
return selectedStudents;
}
public ArrayList getArrayList(){
返回所选学生;
}
并从外部活动调用,但不起作用。让我们先说,片段之间的通信应该使用父活动、接口和一些粘合代码来完成。这已经被问了好几次了,而且也很有趣 尽管如此,在您的情况下,我要做的是将数据与视图分开 您选定的学生名单不应在活动或片段中存在或被修改 您的活动(及其片段)仅仅是Android框架提供的容器和策略委托(如果我可以使用谷歌的术语的话)。你不可能拥有一个没有它们的Android应用程序(至少是一个显示UI的应用程序),所以你必须拥有它们。但这并不意味着你所有的代码都应该在那里 远非如此。活动和片段本身是复杂的(它们有很多事情要做),因此 您的片段应该“请求其数据”来显示列表,并将更改推送到一个地方(我们称之为存储库),因此一旦用户点击列表中的“Alumno”,列表就会告诉repo:“嘿,这个Alumno被选中了” 存储库将接收这些信息,过滤结果并发布它们 在另一端,另一个片段(对所选校友感兴趣的片段)将侦听这些更改,并被告知显示什么 可以这样想: FragmentOther启动并要求回购:“给我要显示的数据” 存储库将回复:这是校友名单 如果用户更改了选择(在学生片段中),它将执行之前所做的操作,告诉repo:嘿,又是被选择的学生,他们更改了 回购协议将再次过滤问题列表,并将其提供给感兴趣的任何人 如果FragmentOther(问题)打开,它将收到它,如果没有,一旦打开,它将请求当前列表,然后回购将返回它 所以你看,这一切的关键是臭名昭著的关注点分离 每个类/对象必须具有最少的职责,并且尽可能可重用 为了使用现代Android实践实现所有这些,我建议您花时间学习: 例如,LiveData、存储库模式和生命周期
所有这些都是我们工作的一部分 让我们首先说,片段之间的通信应该使用父活动、接口和一些粘合代码来完成。这已经被问了好几次了,而且也很有趣 尽管如此,在您的情况下,我要做的是将数据与视图分开 您选定的学生名单不应在活动或片段中存在或被修改 您的活动(及其片段)仅仅是Android框架提供的容器和策略委托(如果我可以使用谷歌的术语的话)。你不可能拥有一个没有它们的Android应用程序(至少是一个显示UI的应用程序),所以你必须拥有它们。但这并不意味着你所有的代码都应该在那里 远非如此。活动和片段本身是复杂的(它们有很多事情要做),因此 您的片段应该“请求其数据”来显示列表,并将更改推送到一个地方(我们称之为存储库),因此一旦用户点击列表中的“Alumno”,列表就会告诉repo:“嘿,这个Alumno被选中了” 存储库将接收这些信息,过滤结果并发布它们 在另一端,另一个片段(对所选校友感兴趣的片段)将侦听这些更改,并被告知显示什么 可以这样想: FragmentOther启动并要求回购:“给我要显示的数据” 存储库将回复:这是校友名单 如果用户更改了选择(在学生片段中),它将执行之前所做的操作,告诉repo:嘿,又是被选择的学生,他们更改了 回购协议将再次过滤问题列表,并将其提供给感兴趣的任何人 如果FragmentOther(问题)打开,它将收到它,如果没有,一旦打开,它将请求当前列表,然后回购将返回它 所以你看,这一切的关键是臭名昭著的关注点分离 每个类/对象必须具有最少的职责,并且尽可能可重用 为了使用现代Android实践实现所有这些,我建议您花时间学习: 例如,LiveData、存储库模式和生命周期
所有这些都是我们工作的一部分 非常感谢你的回答。读了你的评论,我意识到我还有很多东西要学编程。我会听从你的建议。谢谢,非常感谢你的回答。读了你的评论,我意识到我还有很多东西要学编程。我会听从你的建议。非常感谢。
public ArrayList<String> getArrayList() {
return selectedStudents;
}