제 애플리케이션에서 CheckedTextViews를 표시하는 DialogFragment에 ListView가 있습니다. AppCompat 라이브러리를 사용하여 Material Design을 통합하고 있습니다. 나는 "android : attr/listChoiceIndicatorMultiple"과 같이 "android : checkMark"를 설정했다. 그것은 확인되지 않은 상태를 완벽하게 잘 보여 주며 올바른 색조를 적용합니다. 그러나 항목을 검사 할 때 확인 표시가 나타나지 않습니다. 이것은 문제의 이미지입니다."android : checkMark"for Material Design CheckedTextView에 체크 표시가 없습니다.
당신이 볼 수 있듯이, 그것은 제대로 CheckedTextView을 색조,하지만 체크 표시를 표시하지 않습니다. 나는이 문제를 해결하는 데 어려움을 겪고있다. 다른 사람이이 문제를 겪었습니까? 그렇다면 해결책이 있습니까?
다음
내 XML입니다 :item_add_to_queue.xml
<?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>
fragment_add_to_queue.xml
<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>
이것은 DialogFragment 내 코드입니다 :
AddToQueueFragment.java
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);
}
}
}