0

我正在从 XML 创建一个视图,我在 xml 中定义了一行,在我的主布局中,我通过布局充气器添加它并设置组件的 ID(TextView、EditText、Button)运行时间。我有三个要求

  1. 用户可以添加新行(完成)
  2. 用户可以删除行(完成
  3. 我需要从创建的行中获取数据。(也完成了)

我正在关注本教程 https://github.com/laoyang/android-dynamic-views#readme它也是很棒的教程。

我在运行时创建每个组件的 ID 并将其添加到 arraylist,以便我可以通过循环从中获取数据。IE

for (EditText editText : 数量) { }

  1. 问题是当用户按下每一行上的删除按钮时,它也会通过以下代码从布局及其组件中删除该行:

Main.removeView((View) v.getParent());

但其对应的组件 ID 已添加到数组列表中。我希望当用户按下行的删除按钮时,我应该得到它的位置,以便我也可以通过 arraylist 删除它。

  1. 每行都有一个文本视图,它是微调器样式。我想在单击 textview 时打开微调器,并且应该为该 Textview 设置值,而不是所有行。

在这种情况下请帮助我。我真的被困住了,截止日期是今天。

谢谢你

4

2 回答 2

0

ViewGroup您可以在with中获取孩子的索引indexOfChild(View)。您可能需要从该索引中减去偏移量,具体取决于您要添加的行之前有多少子视图(如果有)。

http://developer.android.com/reference/android/view/ViewGroup.html#indexOfChild(android.view.View)

public void onDeleteClicked(View v) {
    // get index
    int index = mContainerView.indexOfChild((View) v.getParent()) - offset;
    // remove from ArrayList
    myArrayList.remove(index);
    // remove the row by calling the getParent on button
    mContainerView.removeView((View) v.getParent());
}

ViewGroup您可以通过在添加任何视图(行)之前存储要添加视图(行)的初始索引来获取偏移量。在提供的链接的情况下(尽管因为它等于 0 而不是不必要的),它将是这样的:

private int offset = 0; 

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    // this should be equal to the index where the first row will be inserted
    // offset = 0 with the code in your link
    offset = mContainerView.getChildCount() - 1;

    // Add some examples
    inflateEditRow("Xiaochao");
    inflateEditRow("Yang");
}
于 2013-01-27T11:28:42.407 回答
0

实现这一点的第一件事是获取您选择的视图的 ID,然后在 arraylist 中搜索该 ID,如果找到则删除它。这应该类似于以下内容:

int myEditTextID = myEditText.getId(); // ids of your selected editext
ids.remove(ids.indexOf(myEditTextID)); // ArrayList<Integer> where you are storing your ids. 

上面的代码首先获取您选择的编辑文本的 id,然后在您的数组列表中搜索它的索引并将其删除。

就这样!:)

于 2013-01-27T10:27:34.083 回答