2016-03-30 7 views
0

У меня есть ListView с simpleAdapter. Если я нажму на какой-либо элемент в моем представлении «Список», он покажет мне две разные переменные. Некоторый код:Почему переменные меняются в зависимости от версии Android?

// Listview Data 
     ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(Invoice_numberArr.length); 
     Map<String, Object> m; 
     for(int i = 0; i<Invoice_numberArr.length; i++){ 
      int str = Integer.parseInt(Invoice_numberArr[i]); 
      int str2 = Integer.parseInt(InvoiceNumberForDetails); 
      if(str == str2){ 
       m = new HashMap<String, Object>(); 
       m.put(ATT_INU, Invoice_numberArr[i]); 
       m.put(ATT_ANU, Article_numberArr[i]); 
       m.put(ATT_AMO, AmountArr[i]); 
       m.put(ATT_PRE, PriceArr[i]); 
       m.put(ATT_TPR, Total_priceArr[i]); 
       m.put(ATT_SDE, Sale_designationArr[i]); 
       data.add(m); 
      } 
     } 

     String[] from = {ATT_INU, ATT_ANU, ATT_AMO, ATT_PRE, ATT_TPR, ATT_SDE}; 
     int[] till = {R.id.txtInvoice_number, R.id.txtArticle_number, R.id.txtAmount, R.id.txtPrice, R.id.txtTotalPrice, R.id.txtSale_designation}; 

     //activities elements 
     invoices_list_details_view = (ListView)findViewById(R.id.invoices_list_details_view); 

     invoicesDetailsSAdapter = new SimpleAdapter(InvoicesDetails.this, data, R.layout.invoices_list_item_details_view, from , till); 
     invoices_list_details_view.setAdapter(invoicesDetailsSAdapter); 

     Utility Utility = new Utility(); 
     Utility.setListViewHeightBasedOnChildren(invoices_list_details_view); 

     //if item clicked 
     invoices_list_details_view.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

       String positions = parent.getAdapter().getItem(position).toString(); 

       //int positions = parent.getAdapter().; 
       parent.getAdapter(); 
       int indexPos = -1; // if doesnt exist 
       for (int i = 0; i < Invoice_numberArr.length; i++) { 
        if (positions.contains("article_numbers="+Article_numberArr[i]+", "+"sale_designations="+Sale_designationArr[i]+", "+"amounts="+AmountArr[i]+", "+"invoice_numbers=" + Invoice_numberArr[i]+", "+"prices="+PriceArr[i]+", "+"total_prices="+Total_priceArr[i])) { 
         indexPos = i; 
         break; 
        } else if (positions.contains("prices="+PriceArr[i]+", "+"article_numbers="+Article_numberArr[i]+", "+"amounts="+AmountArr[i]+", "+"sale_designations="+Sale_designationArr[i]+", "+"invoice_numbers=" + Invoice_numberArr[i]+", "+"total_prices="+Total_priceArr[i])){ 
         indexPos = i; 
         break; 
        } 
       } 
       //some int to transfer it to position class 
       int integerr = indexPos; 

       Intent invoices_details_position = new Intent(InvoicesDetails.this, InvoicesDetailsPosition.class); 
       invoices_details_position.putExtra("saleDesignationForPosition", Sale_designationArr[indexPos]); 
       invoices_details_position.putExtra("articleNumberForPosition", Article_numberArr[indexPos]); 
       invoices_details_position.putExtra("sequenceNumberForPosition", Sequence_numberArr[indexPos]); 
       invoices_details_position.putExtra("amountForPosition", AmountArr[indexPos]); 
       invoices_details_position.putExtra("warehouseForPosition", WarehouseArr[indexPos]); 
       invoices_details_position.putExtra("containerDescriptionForPosition", Container_descriptionArr[indexPos]); 
       invoices_details_position.putExtra("priceForPosition", PriceArr[indexPos]); 
       invoices_details_position.putExtra("discountForPosition", DiscountArr[indexPos]); 
       invoices_details_position.putExtra("totalPriceForPosition", Total_priceArr[indexPos]); 

       startActivity(invoices_details_position); 
      } 
     }); 

Так что, если нажал на мой товар из ListView под Android 4.3 до 5.0 varible

String positions = parent.getAdapter().getItem(position).toString(); 

показывает мне

string " {prices=10.8, article_numbers=0736, amounts=1, sale_designations=Pfirsichlikör, invoice_numbers=1, total_prices=10.8} " 

И если я щелкнул под Android версии 5.1 его показывает меня

string " {article_numbers=0736, sale_designations=Pfirsichlikör, amounts=1, invoice_numbers=1, prices=10.8, total_prices=10.8} " 

Потому что мне нужно проверить его дважды с этим

for (int i = 0; i < Invoice_numberArr.length; i++) { 
      if (positions.contains("article_numbers="+Article_numberArr[i]+", "+"sale_designations="+Sale_designationArr[i]+", "+"amounts="+AmountArr[i]+", "+"invoice_numbers=" + Invoice_numberArr[i]+", "+"prices="+PriceArr[i]+", "+"total_prices="+Total_priceArr[i])) { 
       indexPos = i; 
       break; 
      } else if (positions.contains("prices="+PriceArr[i]+", "+"article_numbers="+Article_numberArr[i]+", "+"amounts="+AmountArr[i]+", "+"sale_designations="+Sale_designationArr[i]+", "+"invoice_numbers=" + Invoice_numberArr[i]+", "+"total_prices="+Total_priceArr[i])){ 
       indexPos = i; 
       break; 
      } 
     } 

Так теперь мой вопрос почему она меняется в зависимости от Android версии? Thx для справки.

+0

'HashMap's не упорядоченные коллекции; т. е. нет гарантии, в каком порядке вы получите элементы при их повторении. Если вам нужен последовательный заказ, используйте 'LinkedHashMap', которые поддерживают порядок вставки. –

+1

Да, вы поняли, спасибо, его помогли! Приложение работает отлично :) – sausagerus

ответ

0

Спасибо @ Mike M. LinkedHashMap s вместо HashMap s работает для всех Android

Смежные вопросы