Java 如何将大量可绘制图像加载到片段列表视图中?
我正在为一本书开发一个应用程序,它有13个单元,每个单元包含许多练习,每个练习包含许多扫描图像(总共450个图像) 现在我有了一个主菜单活动和两个片段,Java 如何将大量可绘制图像加载到片段列表视图中?,java,android,listview,android-fragments,Java,Android,Listview,Android Fragments,我正在为一本书开发一个应用程序,它有13个单元,每个单元包含许多练习,每个练习包含许多扫描图像(总共450个图像) 现在我有了一个主菜单活动和两个片段,fragmentA用于在ListView中显示练习,而fragmentB用于显示练习的扫描图像 我的主菜单活动包含13个按钮,每个按钮对应于每个单元,用于加载该单元的练习 我已经为每个单元分别创建了练习的字符串ArrayLists,以便在用户点击特定单元时将它们加载到fragmentA 1) 现在如何在列表视图中的片段b中加载图像? TypedA
fragmentA
用于在ListView
中显示练习,而fragmentB
用于显示练习的扫描图像
我的主菜单活动包含13个按钮,每个按钮对应于每个单元,用于加载该单元的练习
我已经为每个单元分别创建了练习的字符串ArrayLists
,以便在用户点击特定单元时将它们加载到fragmentA
1) 现在如何在列表视图中的片段b
中加载图像?
TypedArrays
,还是应该在主菜单类中创建integerarray
(1arraylist
用于所有单元的每个练习)
当我在oncreateview
中设置OnItemClick
为ListView
时,在fragmentA
中,它会将相同的操作分配给所有13个ArrayList的ListView项,即如果我将am图像分配给单元1的练习1,它会将该图像分配给所有单元的练习1
< P > 2)如何对所有单元的所有练习分别执行<代码> OnItMeCase? < P> >开发前应考虑的几个事项:
在应用程序中放置450个图像可能会导致应用程序规模过大。请记住,Google Play上.apk文件的大小限制是
在UI上显示如此大规模的图像可能需要大量的处理能力,并可能导致错误。您需要在UI上异步加载图像
如何在ListView的fragmentB中加载图像
您可以使用inFragmentB
要根据练习显示不同的内容,请将单击项目的位置从FragmentA
传递到FragmentB
,并基于该位置,从UI上的ArrayList
设置以下项目
在片段中发送参数的方法
Bundle bundle=new Bundle();
bundle.putString("position", "0");
FragmentB fragmentB=new FragmentB();
fragmentB.setArguments(bundle);
更新
您需要创建模型类来保存内容,例如
Unit.java
public class Unit {
public int unit;
public ArrayList<Exercise> exercises;
}
公共类单元{
公共国际股;
公共阵列列表练习;
}
<> > <代码>练习也是一个模型类。 在开发前应考虑的几个事项:
在应用程序中放置450个图像可能会导致应用程序规模过大。请记住,Google Play上.apk文件的大小限制是
在UI上显示如此大规模的图像可能需要大量的处理能力,并可能导致错误。您需要在UI上异步加载图像
如何在ListView的fragmentB中加载图像
您可以使用inFragmentB
要根据练习显示不同的内容,请将单击项目的位置从FragmentA
传递到FragmentB
,并基于该位置,从UI上的ArrayList
设置以下项目
在片段中发送参数的方法
Bundle bundle=new Bundle();
bundle.putString("position", "0");
FragmentB fragmentB=new FragmentB();
fragmentB.setArguments(bundle);
更新
您需要创建模型类来保存内容,例如
Unit.java
public class Unit {
public int unit;
public ArrayList<Exercise> exercises;
}
公共类单元{
公共国际股;
公共阵列列表练习;
}
其中,Exercise
也是一个模型类。2)OnItemClickListener
将为您提供列表中已单击的位置。使用它在ArrayList
(myList.get(position);
)片段通信中进行查找,还可以查找设计“主细节视图”,听起来像您描述的那样。可能是这个或我正在使用这个,但它为所有练习提供了相同的id ` public void onItemClick(AdapterView父项,视图视图,int位置,长id){TextView TextView=(TextView)视图;Toast.makeText(getActivity(),“您单击了#”+“位置+”,这是列表:”+view.getId()、Toast.LENGTH_LONG).show();`2)OnItemClickListener
将为您提供列表中已单击的位置。使用该位置在ArrayList
中进行查找(myList.get(position);
)片段通信:,同时查找设计“主详细视图”这听起来像你所描述的。可能是这个或我正在使用这个,但它为所有练习提供了相同的id `public void onItemClick(AdapterView父项,视图视图,int位置,长id){TextView TextView=(TextView)视图;Toast.makeText(getActivity(),“你点击了#”+position+”这是一个列表:“+view.getId(),Toast.LENGTH_LONG.show()”`这些图像的大小非常小,比如每个图像20-30KB,所以这不是问题,它总共是12mb,这就是我如何将数据从主活动传递到一个bundle.putStringArrayList(数据,单元1);bundle.putStringArrayList(数据,单元2);等等。现在我如何为单元1的所有项目以及单元2和单元3的所有项目获取不同的ID?你的意思是你在单击任何项目时获得相同的位置?假设我已经为练习1设置了一个祝酒词。如果单元1,它将显示单元2和单元3的练习1的相同祝酒词,直到13,我如何获取所有listview项目的ID,即不同的ID f或者所有13个单元的练习,这样我就可以在每次不同的点击上为不同的操作实现切换情况?我想你会混淆的是arraylist上的数据映射。你是如何在arraylist上映射单元和练习的?我已经为每个单元创建了arraylist,如arraylist unit1=new arraylist();现在,当我将这些列表传递给fragmentA时,就像这个bundle.putStringArrayList(DATA,unit1);然后在fragmentA中接收它,比如DATA=getArguments().getStringArrayList(main menu.DATA);然后fragment加载数据,这就是为什么onItemClick为每个练习的所有项目1分配相同的操作?你明白我说的吗?我想我很困惑