【问题标题】:Android ListView choices are preservedAndroid ListView 选项被保留
【发布时间】:2013-01-15 10:20:26
【问题描述】:

我的活动是 singleTop

这里是oncreate()的部分

    ListView mainListView = (ListView) findViewById(R.id.order_item_list);
     mainListView.clearChoices();
     mainListView.requestLayout();

     listAdapter = new OrderItemAdapter(this,
            R.layout.list_item_order_item, OrderActivity.Order.OrderItems);

    mainListView.setAdapter(listAdapter);

    SparseBooleanArray checkedItems= mainListView.getCheckedItemPositions();
    Log.println(2, "s", Integer.toString(checkedItems.size() ));
}

使用调试器时checkedItems 为0。但是当我从操作中获取它时单击它,checkedItems 具有以前的值。再次使用调试器的引用似乎在同一个对象上。我能对这件事做些什么吗?因为它会导致很多问题。

@Override
    public boolean onOptionsItemSelected(MenuItem menuItem) {
        switch (menuItem.getItemId()) {
        case android.R.id.home:

            //finish();
            // NavUtils.navigateUpFromSameTask(this);
            confirmExit();
            return true;

        case R.id.delete_button:
            ListView mainListView = (ListView) findViewById(R.id.order_item_list);

            SparseBooleanArray checkedItems= mainListView.getCheckedItemPositions();
            boolean hasOld=false;
            break;
        }
        return true;
    }

【问题讨论】:

    标签: android android-listview


    【解决方案1】:

    问题似乎来自这里。

    https://github.com/android/platform_frameworks_base/blob/android-cts-2.3_r12/core/java/android/widget/ListView.java

       @Override
            public Parcelable onSaveInstanceState() {
                Parcelable superState = super.onSaveInstanceState();
                return new SavedState(superState, mCheckStates, mCheckedIdStates);
            }
    
            @Override
            public void onRestoreInstanceState(Parcelable state) {
                SavedState ss = (SavedState) state;
    
                super.onRestoreInstanceState(ss.getSuperState());
    
                if (ss.checkState != null) {
                   mCheckStates = ss.checkState;
                }
    
                if (ss.checkIdState != null) {
                    mCheckedIdStates = ss.checkIdState;
                }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多