【问题标题】:Add child(LinearLayout) views to LinearLayout in android in a paritcular order以特定顺序将子(LinearLayout)视图添加到android中的LinearLayout
【发布时间】:2014-08-02 07:16:15
【问题描述】:

我是 android 开发新手,我想以编程方式将 LinearLayout 视图添加到父 LinearLayout。在这样做的同时,我想按顺序查看它们。也就是说,首先添加的视图应该是 first ,其次添加的视图应该是 second ,依此类推。 我试着用

   HolderLayout.addView(view, index) 

索引在哪里增加,但它对我不起作用。我首先添加的视图在列表中显示在第二位。我该怎么办? 我的代码大纲是:

    int index = 0;
    View Row1 = View.inflate(this, R.layout.childView, null);

    //populate the appropriate data on the child Row and add it to the holder layout.

    holder_layout.addView(Row1 , index);
    index++;
    Set<Integer>keys = MyMap.keySet();

    for(int i : keys){


          View row = View.inflate(this,  
                                   R.layout.childView, null);

          holder_layout.addView(row , index);
          index++;

   }

我哪里错了。

【问题讨论】:

  • 定义不工作。什么不工作?到底发生了什么?
  • 我在 for 循环之外添加的行是我得到的最后一项,实际上它应该是第一个?正确的?因为我在 index = 0 处添加它?
  • 如果您使用垂直方向的线性布局,它将自动按顺序添加新视图
  • 是的,线性布局是垂直的,不是按顺序添加的!

标签: android android-linearlayout


【解决方案1】:

这样做:

holder_layout.addView(row , new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));

我认为您不必指定索引,因为默认行为是根据需要在上面添加

【讨论】:

    【解决方案2】:

    如果不出意外,可能会影响此代码的因素是在循环结束时增加 indexRow1 将被添加到位置 0,然后循环的第一次迭代会将第一个 row 也分配给索引 0。
    我的猜测是在Row1 之前添加row,并相应地更新索引;所以在循环的第二次迭代中,它使用index=1,将它放在Row1之前,依此类推,直到最终结果看起来像ViewGroup { row[0], row[1], row[2] ... row[n] Row1 }
    鉴于这是您声称看到的行为,我敢说这是您的代码的真正问题。尽管如上所述,您可能应该使用addChild(View) - 没有索引,依靠默认行为将其添加到末尾。不幸的是,Android documentation 没有具体说明这一点,但我刚刚对其进行了测试并确认它是这样工作的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      相关资源
      最近更新 更多