材质设计CheckedTextView的“android:checkMark”不显示复选标记
在我的应用程序中,DialogFragment中有一个ListView,它显示CheckedTextView。我正在使用AppCompat库集成材料设计。我将android:checkMark设置为?android:attr/ListChoiceIndicator多个。它完美地显示未选中状态,并应用正确的色调。但是,当我检查项目时,不会显示复选标记。这是问题的一个形象 如您所见,它正确地为CheckedTextView着色,但不显示复选标记。我对修理这件事感到困惑。还有其他人遇到过这个问题吗?如果是,你有解决办法吗 以下是我的XML: 项目添加到queue.xml 片段添加到queue.xml 这是我的DialogFragment代码: AddToQueueFragment.java 我解决了这个问题。应删除RelativeLayout,以便CheckedTextView是唯一的元素,因为ListView为实现Checkable接口的视图调用setChecked材质设计CheckedTextView的“android:checkMark”不显示复选标记,android,Android,在我的应用程序中,DialogFragment中有一个ListView,它显示CheckedTextView。我正在使用AppCompat库集成材料设计。我将android:checkMark设置为?android:attr/ListChoiceIndicator多个。它完美地显示未选中状态,并应用正确的色调。但是,当我检查项目时,不会显示复选标记。这是问题的一个形象 如您所见,它正确地为CheckedTextView着色,但不显示复选标记。我对修理这件事感到困惑。还有其他人遇到过这个问题吗?如
<?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);
}
}
}