Android Listview条目复制

Android Listview条目复制,android,listview,duplicates,Android,Listview,Duplicates,我对android编程相当陌生,我有一个Listview,它的值正在我的代码中填充,但每当方向发生变化或恢复时,列表条目都会被重新填充(导致条目重复)如何解决此问题您可以在清单文件中的活动定义上,使用值orientation设置属性android:configChanges,以防止在方向更改时重新创建活动 <Activity ... ... android:configChanges="orientation" /> ListView中有一个用于填充数据的适配器。 我想您已经在代码

我对android编程相当陌生,我有一个Listview,它的值正在我的代码中填充,但每当方向发生变化或恢复时,列表条目都会被重新填充(导致条目重复)如何解决此问题

您可以在清单文件中的活动定义上,使用值
orientation
设置属性
android:configChanges
,以防止在方向更改时重新创建活动

<Activity
...
...
android:configChanges="orientation"
/>

ListView中有一个用于填充数据的适配器。 我想您已经在代码中使用了它? 因此,您必须先清除适配器中的数据,然后再将其设置为列表视图,以避免重复项。 我也有同样的问题,用它解决了。。。
如果你把你的代码也放进去,我会为你提出来…

这是安卓系统中的一个预期行为,当你改变方向时,它将开始一个新的活动 你可以利用

列出活动将自行处理的配置更改。什么时候 配置更改在运行时发生,活动将关闭 默认情况下重新启动,但使用此 属性将阻止重新启动活动。相反 活动仍在运行,其onConfigurationChanged()方法为 打电话来


将其添加到您的
manifest.xml
文件中,如
android:configChanges=“orientation”

对于
manifest.xml中高于13的API,只需在您的活动中添加
android:configChanges=“orientation”| screenSize“
,对于较低的API,只需添加
android:configChanges=“orientation”

如果应用程序的目标API级别为13或更高(如 minSdkVersion和targetSdkVersion属性),那么您还应该 声明“屏幕大小”配置,因为当 设备在纵向和横向之间切换


根据您的要求,您可以在此处看到一个示例适配器,它已将ViewHolder用于ListView:

public class AllCustomerListCustomAdapter extends SimpleCursorAdapter {

private Cursor c;                       // Passed in cursor
private Activity context;


public CustomAdapter(Activity context, int layout, Cursor c,
        String[] from, int[] to) {

    super(context, layout, c, from, to);
    this.c = c;
    this.context = context;

    c.moveToFirst();
}

static class ViewHolder 
{
    public TextView rowView1;
    public TextView rowView2;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    View rowView = convertView;
    c.moveToPosition(position);


    if (rowView == null) 
    {
        LayoutInflater inflater = (context).getLayoutInflater();
        rowView = inflater.inflate(R.layout.listview_row, null, true);
        holder = new ViewHolder();
        holder.rowView1 = (TextView) rowView.findViewById(R.id.txtListItem1);
        holder.rowView2 = (TextView) rowView.findViewById(R.id.txtListItem2);

        rowView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) rowView.getTag();
    }
    holder.rowView1.setText(c.getString(c.getColumnIndex(DBAdapter.KEY_VIEW1)));
    holder.rowView2.setText(c.getString(c.getColumnIndex(DBAdapter.KEY_VIEW2)));


return rowView;
}

在ListView中,每次设置适配器之前不必清除数据!您的答案有点混乱和不清楚。ListView中重复出现的项目是因为ListView的回收行为,您可以阻止持有者进行回收。亲爱的侯赛因,我认为您的答案应该是评论好的,我会记住这一点,谢谢亲爱的Arash…@Arash我如何使用持有者explain@user2894222:看我的例子好的,我明白每次更改方向时,都会调用oncreate方法,但我仍然希望防止重复条目,因为我在代码中填充了列表。如何检查列表是否已经被填充感谢Arash它起了作用,但我也注意到,如果在将其传递给listview适配器之前定义了值,也会得到相同的效果。实际上,我使用arraylist时没有检查它是否包含任何值,因此每次都从服务器填充arraylist,然后调用适配器的getview来填充行。谢谢all@user2894222:很高兴听到这个消息,如果这对您有帮助,请将其标记为答案!我想解决一个类似的问题,但需要一个回收视图。这条线为我解决了问题。明亮的