簡體   English   中英

數組列表 <hashmap<> &gt;列表視圖中重復的值

[英]Arraylist<hashmap<>> values repeating in listview

我試圖使用簡單的適配器將Sqlite數據庫的內容放入listview。 我正在使用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);
           }

只需在onCreate方法之前聲明ArrayList,就像......

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

如果要將檢索到的值放入ArrayList中,請初始化此ArrayList,如...

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);
}

編輯

由於您在重新運行時遇到問題。請確保數據庫不會使用保存值OR重新填充行

只需重新初始化你的arraylists myArrList = new ArrayList<String>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM