对于Android编程来说相当新,我有一个Listview,其值正在我的代码中填充,但每当有方向更改或恢复列表条目正在重新填充(导致重复条目)我如何解决此问题< / p>
答案 0 :(得分:1)
对于活动manifest.xml
中高于13的API,只需添加android:configChanges="orientation|screenSize"
,对于较低的API,只需添加android:configChanges="orientation"
如果您的应用程序的目标是API级别13或更高级别(由 minSdkVersion和targetSdkVersion属性),那么你也应该 声明“screenSize”配置,因为它也会在a时发生变化 设备在纵向和横向之间切换。
答案 1 :(得分:1)
根据您的要求,您可以看到使用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;
}
答案 2 :(得分:0)
您可以在清单文件上的活动定义中设置值为android:configChanges
的属性orientation
,以防止在方向更改时重新创建活动。
<Activity
...
...
android:configChanges="orientation"
/>
答案 3 :(得分:0)
ListView有一个适配器,用于填充数据。 我想你已经在你的代码中使用过了吗? 因此,在将其设置为列表视图之前,必须清除适配器中的数据以避免重复项。 我有同样的问题,并通过使用它解决... 如果你把你的代码也提到了我...
答案 4 :(得分:0)
这是android中的预期行为,当您更改方向时,它将启动一个新活动 您可以使用android:configChanges
列出活动将自行处理的配置更改。什么时候 在运行时发生配置更改,活动将关闭 默认情况下重新启动,但使用此声明配置 属性将阻止活动重新启动。相反, 活动仍在运行,其onConfigurationChanged()方法是 调用。
将此manifest.xml
android:configChanges="orientation"
文件中