Android 添加&;使用ArrayAdapter从LinearLayout中删除项

Android 添加&;使用ArrayAdapter从LinearLayout中删除项,android,android-layout,android-arrayadapter,Android,Android Layout,Android Arrayadapter,我正在对所选联系人进行气泡显示。每个电话泡都是一个线性布局,其中包含ImageView和TextView。然后,这些气泡将显示在另一个LinearLayout中,它是HorizontalScrollView的子级 它的子/父树如下所示: - HorizontalScrollView |- LinearLayout (id="@+id/telField") |- LinearLayout (id="@+id/telBox") <- is programmatically added

我正在对所选联系人进行气泡显示。每个电话泡都是一个线性布局,其中包含ImageView和TextView。然后,这些气泡将显示在另一个LinearLayout中,它是HorizontalScrollView的子级

它的子/父树如下所示:

 - HorizontalScrollView
 |- LinearLayout (id="@+id/telField")
  |- LinearLayout (id="@+id/telBox")  <- is programmatically added to parent
   |- TextView (id="@+id/telNumber")
   |- ImageView (id="@+id/delNumber")
我面临的问题是:

在我点击id为“telNumber”的LinearLayout后,它会一个接一个地删除每个气泡(无论我点击了哪个),直到它到达第一个添加的气泡。当到达第一个添加的元素时,它也会50/50崩溃,我还没有找到依赖项。它返回的错误是“越界错误”,因此我认为它与
ik-1
行有关


我的问题是:如何更好地构造ArrayAdapter?

在for循环中,编写以下代码行:

for (ik = 0; ik < adapterCount; ik++) {

    final View item = telList.getView(ik, null, null);
    item.setTag(ik);
    telField.addView(item);

    item.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            int index = Integer.parseInt(v.getTag().toString());
            telNumList.remove(index);
            refresh();
        }
    });
}
for(ik=0;ik

希望它能帮助您解决问题。

在for循环中,编写以下代码行:

for (ik = 0; ik < adapterCount; ik++) {

    final View item = telList.getView(ik, null, null);
    item.setTag(ik);
    telField.addView(item);

    item.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            int index = Integer.parseInt(v.getTag().toString());
            telNumList.remove(index);
            refresh();
        }
    });
}
for(ik=0;ik

希望它能对您有所帮助。

在您的代码中,您试图通过
ik
删除视图,该视图正在不断更改,因为您的编码正在删除上一个视图。我已修改了您的代码,如下所示

for (ik = 0; ik < adapterCount; ik++) {
        final int position=ik;
        final View item = telList.getView(ik, null, null);
        telField.addView(item);

        item.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                telField.removeView(item);
                telNumList.remove(position);
                telList.notifyDataSetChanged();
                //refresh();
                createAdapter();
            }
        });
    }
for(ik=0;ik

此处的
position
将帮助您删除要删除的特定视图。我希望这就是您所要求的。

在您的代码中,您试图通过
ik
删除视图,该视图正在不断更改,因为您的编码正在删除上一个视图。我已修改了您的代码,如下所示

for (ik = 0; ik < adapterCount; ik++) {
        final int position=ik;
        final View item = telList.getView(ik, null, null);
        telField.addView(item);

        item.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                telField.removeView(item);
                telNumList.remove(position);
                telList.notifyDataSetChanged();
                //refresh();
                createAdapter();
            }
        });
    }
for(ik=0;ik

此处的
position
将帮助您删除要删除的特定视图。我希望这就是您所要求的。

我认为,与线性布局相比,水平循环视图将是更好的选择,因为添加-删除将更容易。您在预览中显示的视图完全可以通过tokenAutoComplete库实现:。祝你好运在我看来,与线性布局相比,水平循环视图将是更好的选择,因为添加-删除将更容易。您在预览中显示的视图完全可以通过tokenAutoComplete lib实现:。祝你好运您的解决方案有效,谢谢!我非常感谢你的帮助!不幸的是,拉胡尔·夏尔马跑得更快:)这不是问题。谢谢你的支持投票。我希望这将有助于其他人谁会发现它更容易。你的解决方案工程,谢谢!我非常感谢你的帮助!不幸的是,拉胡尔·夏尔马跑得更快:)这不是问题。谢谢你的支持投票。我希望这将有助于其他人谁会发现它更容易。