我正在尝试使用简单的适配器将 Sqlite 数据库的内容放入列表视图中。我正在使用数组列表>来获取所有值。它显示在列表视图上,但每次我运行它时,这些值似乎都会重复。我该怎么办?这是我的代码
ArrayList<HashMap<String, String>>val=new ArrayList<HashMap<String,String>>();
Databasehandler db=new Databasehandler(this);
private ListView lv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts);
val=db.getAllContacts();
final ListView lv=(ListView)findViewById(R.id.listView1);
if(val.size()!=0)
{
ListAdapter ad=new SimpleAdapter(Contact.this,val,R.layout.v,new String[]{"contacts"},new int[]{R.id.textView2});
lv.setAdapter(ad);
}
只需在onCreate方法之前声明ArrayList,例如...
ArrayList<HashMap<String, String>>val = null;
并初始化此数组列表,当您想要将检索到的值放入数组列表时,例如...
val=new ArrayList<HashMap<String,String>>();
,问题出在您的列表适配器(简单适配器)中。请检查您的列表适配器的 getView() 是否添加了视图,只需使用以下检查您的适配器...
只需使用此自定义适配器,
public class CustomAdapter extends BaseAdapter {
private List<SearchObjects> mObjects = null;
private LayoutInflater mInflater = null;
public CustomAdapter (Context context, List<SearchObjects> mData) {
mObjects = mData;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
return mObjects.size();
}
public Object getItem(int position) {
return mObjects.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null)
{
convertView = mInflater.inflate(R.layout.search_items_single_row,null);
holder = new ViewHolder();
holder.txtvName = (TextView) convertView.findViewById(R.id.txtvItemName);
convertView.setTag(holder);
}
else
holder = (ViewHolder) convertView.getTag();
holder.txtvName.setText(mObjects.get(position).getDL_TRADENAME());
return convertView;
}
private class ViewHolder {
TextView txtvName = null;
}
}
并称之为,
mCustomListAdapter = new RxNewSearchDrugsListAdapter(getActivity(), mSearchObjects);
mListView.setAdapter(mCustomListAdapter );
您是否检查过您的数据库。它有重复的值吗???
如果没有 - 尝试仅在列表中不存在时才在 Arraylist 中添加值
for(each..str){
if(!myArrList.contains(str)){
myArrList.add(str);
}
编辑
因为你在运行它时面对问题.确保数据库不会使用保存值重新填充行或
只需重新初始化您的数组列表 .eg myArrList = new ArrayList<String>();