通过在android中迭代两个数组列表来显示项目

时间:2015-09-21 15:38:13

标签: android android-layout arraylist iterator

我有两个数组列表,我想迭代这两个列表,我想在四列中显示这两个列表的项目,如下所示。

两个数组列表是,

      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);

这两个上面的循环没有执行,需要更好的实现和正确的逻辑。我知道我需要在里面写更多的循环。

帮助我根据需要显示项目。总是感谢帮助

由于

1 个答案:

答案 0 :(得分:0)

我不知道你在做什么或者你是如何确定哪些物品需要去哪里的。你的循环似乎只是先放置所有突出显示的项目,然后是所有正常项目。您的布局也不会补偿较大的突出显示项目。

我的建议:

  • 您的布局应该是一个GridSearch,其autocollumns设置为2列。

  • 突出显示的项目将消耗整列(屏幕的一半)。

  • 当您需要放置普通项目时,请在网格视图单元格中添加第二个网格视图(或网格布局)。

找出获取所需物品的逻辑。我不知道你要做什么,但是如果他们可以以某种方式排序你可以合并两个arraylists然后根据项目是突出显示还是正常选择布局。