2012-10-12 29 views
1

,當我作爲使用Android的ListView控件被貌似在一個非常奇怪的問題倒在setItemChecked

listview.setItemChecked() 

有在與同一開發者文檔沒有文件確認標誌的項目列表視圖中的順序被顛倒。我感謝任何幫助。

下面是檢查項目部分

CheckBox box = (CheckBox) convertView.findViewById(R.id.select); 
box.setOnClickListener(new OnClickListener() { 
    public void onClick(View view) { 
     CheckBox checkBox = (CheckBox) view; 
     list.setItemChecked(position + list.getHeaderViewsCount(), checkBox.isChecked()); 

     final long[] checkedItemIds = list.getCheckedItemIds(); 
     Log.d(Constants.TAG, 
       "HomeActivity.onCreate(...).new EMListAdapter() {...}.getView(...).new OnClickListener() {...}.onClick: " + Arrays.toString(checkedItemIds)); 
     if (checkedItemIds.length > 0) { 
      if (mMode == null) { 
       mMode = startActionMode(new EashmartActionBar(HomeActivity.this) { 
        public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
         menu.add(R.string.delete).setIcon(R.drawable.bin).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
         return true; 
        } 

        public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 
         switch (item.getItemId()) { 
         case 0: 
          Log.d(Constants.TAG, 
            "HomeActivity.onCreate(...).new EMListAdapter() {...}.getView(...).new OnClickListener() {...}.onClick(...).new EashmartActionBar() {...}.onActionItemClicked: " 
              + Arrays.toString(checkedItemIds)); 
          invoiceManager.delete(checkedItemIds); 
          break; 
         } 
         mode.finish(); 
         mMode = null; 
         return true; 
        } 

        public void onDestroyActionMode(ActionMode mode) { 
         for (int i = 0; i < list.getCount(); i++) { 
          list.setItemChecked(i, false); 
         } 
         mMode = null; 
        } 
       }); 
      } 
     } else { 
      if (mMode != null) { 
       mMode.finish(); 
       mMode = null; 
      } 
     } 
    } 
}); 

這個問題似乎在4.0

+0

請描述「得到倒置」... – Sam

+0

倒在第一個項目成爲最後,最後成爲第一個 – Amit

+0

好吧,你是對的,這不是「正常」的行爲。請發佈相關代碼,以便我們看到發生了什麼。 – Sam

回答

0

是發生在只有2.3,而不是不要直接從列表中刪除元素的代碼。
首先從ArrayAdapter的ArrayList中移除元素。
而不是使用新的ArrayList值重新創建/刷新列表視圖。

+0

我不是從任何地方的列表中刪除項目 – Amit

+0

invoiceManager.delete(checkedItemIds); – VicVu

+0

這是發送一個請求到服務器從數據庫中刪除項目,並從適配器中刪除項目。 – Amit