在ListView中,Arraylist<hashmap<>>的值重复了

3

我正在尝试使用简单的适配器将Sqlite数据库的内容放入列表视图中。 我正在使用一个arraylist>来获取所有值。它会显示在列表视图中,但每次运行时值似乎都会重复。 我该怎么办? 这是我的代码

             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);
           }
3个回答

1

只需在onCreate方法之前声明ArrayList,例如...

ArrayList<HashMap<String, String>>val = null;

当您想将检索到的值放入ArrayList中时,请初始化此ArrayList,例如...
val=new ArrayList<HashMap<String,String>>();

如何从哈希映射中删除相同的值? - anu_r

1
我认为问题出在你的列表适配器(Simple Adapter)上。请检查你的列表适配器的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;
     }
}

& call it as,

mCustomListAdapter = new RxNewSearchDrugsListAdapter(getActivity(), mSearchObjects);
mListView.setAdapter(mCustomListAdapter );

0

你检查过数据库了吗?它有重复的值吗???

如果没有 - 尝试只在ArrayList中添加不存在于列表中的值

for(each..str){
if(!myArrList.contains(str)){
myArrList.add(str);
}

编辑

由于您在重新运行时遇到了问题,请确保数据库不会重新填充具有保存值的行或者

只需重新初始化您的ArrayLists。例如:myArrList = new ArrayList<String>();


数据库不包含重复的值。 - anu_r

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接