2014-12-28 3 views
0

제 애플리케이션에서 CheckedTextViews를 표시하는 DialogFragment에 ListView가 있습니다. AppCompat 라이브러리를 사용하여 Material Design을 통합하고 있습니다. 나는 "android : attr/listChoiceIndicatorMultiple"과 같이 "android : checkMark"를 설정했다. 그것은 확인되지 않은 상태를 완벽하게 잘 보여 주며 올바른 색조를 적용합니다. 그러나 항목을 검사 할 때 확인 표시가 나타나지 않습니다. 이것은 문제의 이미지입니다."android : checkMark"for Material Design CheckedTextView에 체크 표시가 없습니다.

당신이 볼 수 있듯이

Imgur

, 그것은 제대로 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); 
     } 
    } 
} 

답변

0

나는이 문제를 해결했다. RelativeLayoutCheckedTextView이 유일한 요소이기 때문에 제거해야합니다. ListView은 인터페이스를 구현하는 View에 대해 setChecked()을 호출하기 때문입니다.

관련 문제