材质设计CheckedTextView的“android:checkMark”不显示复选标记

材质设计CheckedTextView的“android:checkMark”不显示复选标记,android,Android,在我的应用程序中,DialogFragment中有一个ListView,它显示CheckedTextView。我正在使用AppCompat库集成材料设计。我将android:checkMark设置为?android:attr/ListChoiceIndicator多个。它完美地显示未选中状态,并应用正确的色调。但是,当我检查项目时,不会显示复选标记。这是问题的一个形象 如您所见,它正确地为CheckedTextView着色,但不显示复选标记。我对修理这件事感到困惑。还有其他人遇到过这个问题吗?如

在我的应用程序中,DialogFragment中有一个ListView,它显示CheckedTextView。我正在使用AppCompat库集成材料设计。我将android:checkMark设置为?android:attr/ListChoiceIndicator多个。它完美地显示未选中状态,并应用正确的色调。但是,当我检查项目时,不会显示复选标记。这是问题的一个形象

如您所见,它正确地为CheckedTextView着色,但不显示复选标记。我对修理这件事感到困惑。还有其他人遇到过这个问题吗?如果是,你有解决办法吗

以下是我的XML:

项目添加到queue.xml

片段添加到queue.xml

这是我的DialogFragment代码:

AddToQueueFragment.java

我解决了这个问题。应删除RelativeLayout,以便CheckedTextView是唯一的元素,因为ListView为实现Checkable接口的视图调用setChecked

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/single_line_height">

    <CheckedTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:gravity="center_vertical"
        android:checkMark="?android:attr/listChoiceIndicatorMultiple"
        android:ellipsize="middle"
        android:singleLine="true"
        android:textColor="@color/secondaryText"
        android:textSize="@dimen/typography_subhead"
        android:id="@+id/checkedTextView"/>

</RelativeLayout>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="@dimen/dialog_content_padding"
    android:background="@color/secondaryBackground">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="@dimen/baseline_component_unit"
        android:textColor="@color/primaryBlue500"
        android:textSize="@dimen/typography_title"
        android:textStyle="bold"
        android:text="@string/dialog_add_to_queue" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <include layout="@layout/empty"/>

        <ListView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:headerDividersEnabled="false"
            android:footerDividersEnabled="false"
            android:choiceMode="multipleChoice"
            android:listSelector="@drawable/item_selector"
            android:id="@+id/listView"/>

    </FrameLayout>

</LinearLayout>
public class AddToQueueFragment extends DialogFragment implements AddToQueueView, AddToQueueMapper {
    public static final String TAG = AddToQueueFragment.class.getSimpleName();

    public static final String REQUEST_ARGUMENT_KEY = TAG + ":" + "RequestArgumentKey";

    private AddToQueuePresenter mAddToQueuePresenter;

    private ListView mListView;
    private RelativeLayout mEmptyRelativeLayout;
    private Button mToggleButton;

    public static AddToQueueFragment newInstance(RequestWrapper mangaRequest) {
        AddToQueueFragment newInstance = new AddToQueueFragment();

        Bundle arguments = new Bundle();
        arguments.putParcelable(REQUEST_ARGUMENT_KEY, mangaRequest);
        newInstance.setArguments(arguments);

        return newInstance;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mAddToQueuePresenter = new AddToQueuePresenterImpl(this, this);
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        View addToQueueView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_add_to_queue, null);
        mListView = (ListView)addToQueueView.findViewById(R.id.listView);
        mEmptyRelativeLayout = (RelativeLayout)addToQueueView.findViewById(R.id.emptyRelativeLayout);

        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(getActivity());
        dialogBuilder.setView(addToQueueView)
                .setPositiveButton(R.string.add_to_queue_dialog_button_queue, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        mAddToQueuePresenter.onQueueButtonClick();
                    }
                })
                .setNeutralButton(R.string.add_to_queue_dialog_button_toggle_all, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do Nothing.
                    }
                })
                .setNegativeButton(R.string.catalogue_filter_dialog_button_cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        AddToQueueFragment.this.getDialog().cancel();
                    }
                });

        return dialogBuilder.create();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            mAddToQueuePresenter.restoreState(savedInstanceState);
        } else {
            mAddToQueuePresenter.handleInitialArguments(getArguments());
        }

        mAddToQueuePresenter.initializeViews();

        mAddToQueuePresenter.initializeDataFromDatabase();
    }

    @Override
    public void onStart() {
        super.onStart();

        mAddToQueuePresenter.overrideDialogButtons();
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        mAddToQueuePresenter.saveState(outState);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        mAddToQueuePresenter.destroyAllSubscriptions();
        mAddToQueuePresenter.releaseAllResources();
    }

    // AddToQueueView:

    @Override
    public void initializeEmptyRelativeLayout() {
        if (mEmptyRelativeLayout != null) {
            ((ImageView) mEmptyRelativeLayout.findViewById(R.id.emptyImageView)).setImageResource(R.drawable.ic_file_download_white_48dp);
            ((ImageView) mEmptyRelativeLayout.findViewById(R.id.emptyImageView)).setColorFilter(getResources().getColor(R.color.accentPinkA200), PorterDuff.Mode.MULTIPLY);
            ((TextView) mEmptyRelativeLayout.findViewById(R.id.emptyTextView)).setText(R.string.no_available_downloads);
            ((TextView) mEmptyRelativeLayout.findViewById(R.id.instructionsTextView)).setText(R.string.available_downloads_instructions);
        }
    }

    @Override
    public void hideEmptyRelativeLayout() {
        if (mEmptyRelativeLayout != null) {
            mEmptyRelativeLayout.setVisibility(View.GONE);
        }
    }

    @Override
    public void showEmptyRelativeLayout() {
        if (mEmptyRelativeLayout != null) {
            mEmptyRelativeLayout.setVisibility(View.VISIBLE);
        }
    }

    @Override
    public void overrideToggleButton() {
        AlertDialog currentDialog = (AlertDialog)getDialog();
        if (currentDialog != null) {
            mToggleButton = currentDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
            mToggleButton.setOnClickListener(new View.OnClickListener(){
                @Override
                public void onClick(View v) {
                    mAddToQueuePresenter.onToggleButtonClick();
                }
            });
        }
    }

    @Override
    public void selectAll() {
        if (mListView != null) {
            for (int index = 0; index < mListView.getCount(); index++) {
                mListView.setItemChecked(index, true);
            }
        }
    }

    @Override
    public void clear() {
        if (mListView != null) {
            for (int index = 0; index < mListView.getCount(); index++) {
                mListView.setItemChecked(index, false);
            }
        }
    }

    @Override
    public Context getContext() {
        return getActivity();
    }


    // AddToQueueMapper:

    @Override
    public void registerAdapter(BaseAdapter adapter) {
        if (mListView != null) {
            mListView.setAdapter(adapter);
        }
    }

    @Override
    public int getCheckedItemCount() {
        if (mListView != null) {
            return mListView.getCheckedItemCount();
        } else {
            return 0;
        }
    }

    @Override
    public SparseBooleanArray getCheckedItemPositions() {
        if (mListView != null) {
            return mListView.getCheckedItemPositions();
        } else {
            return null;
        }
    }

    @Override
    public Parcelable getPositionState() {
        if (mListView != null) {
            return mListView.onSaveInstanceState();
        } else {
            return null;
        }
    }

    @Override
    public void setPositionState(Parcelable state) {
        if (mListView != null) {
            mListView.onRestoreInstanceState(state);
        }
    }
}