我有两个数组列表,我想迭代这两个列表,我想在四列中显示这两个列表的项目,如下所示。
两个数组列表是,
ArrayList<BaseItem> highlighted = new ArrayList<BaseItem>();
ArrayList<BaseItem> normal = new ArrayList<BaseItem>();
我的布局有四列
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:baselineAligned="false">
<LinearLayout android:id="@+id/column_one"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" />
<LinearLayout android:id="@+id/column_two"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" />
<LinearLayout android:id="@+id/column_three"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" />
<LinearLayout android:id="@+id/column_four"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:visibility="gone" />
我想迭代两个arraylists并希望按以下顺序显示项目。
coloumn1 coloumn2 coloumn3 coloumn4
highlighted1 normal1 normal4
highlited2 normal2 normal5
highlighted3 normal3
highlighted4 highlighted5
normal6 normal7 highlighted6
注意:每个突出显示的项目占据屏幕宽度的50%,正常项目占据屏幕宽度的25%。
上述序列将再次继续,直到所有图像都被加载
这就是我如何将值添加到两个arraylists
private List<BaseItem> mItems;
for (Iterator<BaseItem> iterator = mItems.iterator(); iterator.hasNext();) {
BaseItem itemtype = iterator.next();
if (itemtype.isHighlightPost()) {
highlighted.add(itemtype);
System.out.println("This is highlited: " + itemtype);
Log.i("HIGHLITED",highlighted.toString());
}
else{
normal.add(itemtype);
System.out.println("This is normal: " + itemtype);
Log.i("NORMAL",normal.toString());
}
}
说我有两个循环作为folows
运行 View v = inflater.inflate(R.layout.items_layout, null);
int width_post = getResources().getDimensionPixelSize(R.dimen.item_width);
LinearLayout.LayoutParams params_highlight = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
params_highlight.width = width_post*2;
LinearLayout.LayoutParams params_normal = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.MATCH_PARENT);
params_normal.width = width_post;
for (int j = 0;j<highlighted.size()-1;j++) { //outer loop for highlighted items
BaseItem itemH = highlighted.get(mCurrentItem);
column1.setVisibility(View.VISIBLE);
column1.setLayoutParams(params_highlight);
View itemView1 = inflater.inflate(R.layout.item, null);
column1.addView(itemView1);
column1.setLayoutParams(params_highlight);
if(j==4) break;
for (int k =0;k<normal.size();k++) { //Inner loop for normal items
BaseItem itemH = highlighted.get(mCurrentItem);
column3.setVisibility(View.VISIBLE);
column3.setLayoutParams(params_highlight);
View itemView2 = inflater.inflate(R.layout.item, null);
column3.addView(itemView2);
column1.setLayoutParams(params_normal);
if(k==3) break;
}
}
mCurrentItem++;
parentLinearLayout.addView(v);
这两个上面的循环没有执行,需要更好的实现和正确的逻辑。我知道我需要在里面写更多的循环。
帮助我根据需要显示项目。总是感谢帮助
由于
答案 0 :(得分:0)
我不知道你在做什么或者你是如何确定哪些物品需要去哪里的。你的循环似乎只是先放置所有突出显示的项目,然后是所有正常项目。您的布局也不会补偿较大的突出显示项目。
我的建议:
您的布局应该是一个GridSearch,其autocollumns设置为2列。
突出显示的项目将消耗整列(屏幕的一半)。
当您需要放置普通项目时,请在网格视图单元格中添加第二个网格视图(或网格布局)。
找出获取所需物品的逻辑。我不知道你要做什么,但是如果他们可以以某种方式排序你可以合并两个arraylists然后根据项目是突出显示还是正常选择布局。