Android setItemChecked()视图无法更改

Android setItemChecked()视图无法更改,android,android-layout,listview,android-activity,android-fragments,Android,Android Layout,Listview,Android Activity,Android Fragments,由于某些原因,我无法通过编程在listview上设置选中的行。它在setOnItemLongClickListener中正常工作 在屏幕旋转之后,我尝试在listview上调用setItemChecked()。根据日志检查了正确的行,但我没有看到更改 如果加载/刷新数据,则调用下面的setupList()方法。 如果purchaseOrderArrayList不为null,则在onCreate方法中也会调用此方法 private void setupList() { mPurchase

由于某些原因,我无法通过编程在listview上设置选中的行。它在setOnItemLongClickListener中正常工作

在屏幕旋转之后,我尝试在listview上调用setItemChecked()。根据日志检查了正确的行,但我没有看到更改

如果加载/刷新数据,则调用下面的setupList()方法。 如果purchaseOrderArrayList不为null,则在onCreate方法中也会调用此方法

private void setupList() {

    mPurchaseOrderListView.setAdapter(new PurchaseOrderListAdapter(getActivity(), purchaseOrdersArrayList));

    if (mSelectedPurchaseOrderIndex != -1) {
        //this is where it does not work :(
        mPurchaseOrderListView.setItemChecked(mSelectedPurchaseOrderIndex, true);
        Log.v(Constants.LOG, "number of selections = " + mPurchaseOrderListView.getCheckedItemCount());
        Log.v(Constants.LOG, "id     of selections = " + mPurchaseOrderListView.getCheckedItemPosition());
        Log.v(Constants.LOG, "choice mode = " + mPurchaseOrderListView.getChoiceMode());
    }

    mPurchaseOrderListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(final AdapterView<?> parent, View view, final int position, long id) {

            // if actionMode is null "not started"
            if (mActionMode != null)
                return false;

            // Start the CAB
            mActionMode = getActivity().startActionMode(mActionModeCallback);
            mActionMode.setTag(purchaseOrdersArrayList.get(position));
            mSelectedPurchaseOrderIndex = position;
            view.setActivated(true);
            return true;
        }
    });
}
private void setupList(){
setAdapter(新的PurchaseOrderListAdapter(getActivity(),purchaseOrdersArrayList));
如果(mSelectedPurchaseOrderIndex!=-1){
//这是它不起作用的地方:(
mPurchaseOrderListView.setItemChecked(mSelectedPurchaseOrderIndex,true);
Log.v(Constants.Log,“选择数=“+mppurchaseOrderListView.getCheckedItemCount());
Log.v(Constants.Log,“选择的id=“+mPurchaseOrderListView.getCheckEditePosition());
Log.v(Constants.Log,“choice mode=“+mppurchaseOrderListView.getChoiceMode());
}
mPurchaseOrderListView.setOnItemLongClickListener(新的AdapterView.OnItemLongClickListener(){
@凌驾
公共布尔值长单击(最终适配器视图父级、视图视图、最终整型位置、长id){
//如果actionMode为null,“未启动”
if(mActionMode!=null)
返回false;
//启动驾驶室
mActionMode=getActivity().startActionMode(mActionModeCallback);
setTag(purchaseOrdersArrayList.get(position));
mSelectedPurchaseOrderIndex=位置;
view.setActivated(true);
返回true;
}
});
}
这是我的列表视图的布局(fragment\u purchase\u orders.xml)


这是行的布局(simple\u row\u layout.xml)


下面是该行背景的布局(simple_list_background.xml)


而不是使用

view.setActivated(true)
我曾经

mPurchaseOrderList.setItemChecked(position, true)
一切正常,我不再需要存储位置。因此,我删除了
mSelectedPurchaseOrderIndex
变量。(注意,我认为这是因为listview包含在片段中,如果listview位于活动中,我确实需要保存所选位置)

<selector xmlns:android="http://schemas.android.com/apk/res/android"
android:exitFadeDuration="@android:integer/config_mediumAnimTime">

<item android:drawable="@android:color/darker_gray" android:state_pressed="true"/>
<item android:drawable="@color/yellow_color" android:state_selected="true"/>
<item android:drawable="@color/green_color" android:state_activated="true"/>
<item android:drawable="@color/white_color"/>
view.setActivated(true)
mPurchaseOrderList.setItemChecked(position, true)