复选框在Android 4.x中不可见,但在Android 5+;

复选框在Android 4.x中不可见,但在Android 5+;,android,listview,checkbox,Android,Listview,Checkbox,我有listview,它包含textview和一个复选框 我正在对话框片段中显示列表视图。问题是,对于运行Android版本4.1到4.4.4的设备(emulator),复选框不会显示。但它们在安卓5.0+上正常出现。我已经试着解决这个问题好几个小时了。但是没有成功 有人能告诉我我做错了什么吗 [] 列表视图: <RelativeLayout android:id="@+id/rl_cats_overlay" android:layout_width="w

我有listview,它包含textview和一个复选框

我正在
对话框片段
中显示
列表视图
。问题是,对于运行Android版本4.1到4.4.4的设备(emulator),复选框不会显示。但它们在安卓5.0+上正常出现。我已经试着解决这个问题好几个小时了。但是没有成功

有人能告诉我我做错了什么吗

[]

列表视图:

<RelativeLayout
        android:id="@+id/rl_cats_overlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/tv_game_info">

        <ListView
            android:id="@+id/lv_select_cats"
            android:layout_width="wrap_content"
            android:layout_height="200dp"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:fadeScrollbars="false" />

        <TextView
            android:id="@+id/tv_overlay_pro"
            android:layout_width="wrap_content"
            android:layout_height="200dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="35dp"
            android:layout_marginRight="35dp"
            android:background="#A6000000"
            android:gravity="center"
            android:text="Available with \n'Quiz Time Pro'"
            android:textColor="@color/android_green"
            android:textSize="24sp" />

    </RelativeLayout>

列表视图行:

<?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="wrap_content"
android:orientation="horizontal">

<CheckBox
    android:id="@+id/cb_row_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"/>

<TextView
    android:id="@+id/tv_row_item"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/cb_row_item"
    android:layout_alignBottom="@+id/cb_row_item"
    android:layout_marginLeft="12dp"
    android:layout_marginStart="12dp"
    android:layout_toEndOf="@+id/cb_row_item"
    android:layout_toRightOf="@+id/cb_row_item"
    android:text="Category name goes here"
    android:textSize="15sp" />

</RelativeLayout>

DialogFragment类膨胀listview:

public class SelectGameModeDialogFragment extends DialogFragment {

boolean[] checkedCategories = new boolean[Constants.CATEGORIES.length + 1];
boolean[] checkedDifficulty = new boolean[Constants.DIFFICULTY_LEVELS.length + 1];

List<String> categories = new ArrayList<>();
List<String> difficultyLevels = new ArrayList<>();

TextView gameInfoTV;
Spinner spinner;

public static SelectGameModeDialogFragment newInstance(String title) {
    SelectGameModeDialogFragment frag = new SelectGameModeDialogFragment();
    Bundle args = new Bundle();
    args.putString("title", title);
    frag.setArguments(args);
    frag.setStyle(DialogFragment.STYLE_NO_FRAME, 0);
    return frag;
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    categories.addAll(Arrays.asList(Constants.CATEGORIES));
    difficultyLevels.addAll(Arrays.asList(Constants.DIFFICULTY_LEVELS));
    return inflater.inflate(R.layout.select_game_mode, container);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    final ListView lvCategories = (ListView) view.findViewById(R.id.lv_select_cats);

    gameInfoTV = (TextView) view.findViewById(R.id.tv_game_info);
    gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[0]);

    final TextView proTV = (TextView) view.findViewById(R.id.tv_overlay_pro);
    final Button btnPlay = (Button) view.findViewById(R.id.btn_restart_game);

    spinner = (Spinner) view.findViewById(R.id.spinner_gamer_categories);
    ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.game_types_spinner, R.layout.spinner_item);
    adapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
    spinner.setAdapter(adapter);
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
            if (pos == Constants.MODE_MILLIONAIRE
                    || pos == Constants.MODE_UNLIMITED
                    || pos == Constants.MODE_20QUESTIONS
                    || pos == Constants.MODE_60SECONDS) {
                ViewGroup.LayoutParams params = lvCategories.getLayoutParams();
                params.height = 0;
                lvCategories.setLayoutParams(params);
                proTV.setVisibility(View.GONE);
            } else if (pos == Constants.MODE_CATEGORIES) {
                MultipleCategoryListAdapter adapter = new MultipleCategoryListAdapter(getActivity(), categories);
                lvCategories.setAdapter(adapter);
                ViewGroup.LayoutParams params = lvCategories.getLayoutParams();
                params.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, getResources().getDisplayMetrics());
                lvCategories.setLayoutParams(params);
            } else if (pos == Constants.MODE_DIFFICULTY) {
                SingleCategoryListAdapter adapter = new SingleCategoryListAdapter(getActivity(), difficultyLevels);
                lvCategories.setAdapter(adapter);
                ViewGroup.LayoutParams params = lvCategories.getLayoutParams();
                params.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics());
                lvCategories.setLayoutParams(params);
            }
            lvCategories.setVisibility(View.INVISIBLE);
            if (pos == Constants.MODE_MILLIONAIRE) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[0]);
            } else if (pos == Constants.MODE_20QUESTIONS) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[1]);
            } else if (pos == Constants.MODE_CATEGORIES) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[2]);
                lvCategories.setVisibility(View.VISIBLE);
            } else if (pos == Constants.MODE_60SECONDS) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[3]);
            } else if (pos == Constants.MODE_UNLIMITED) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[4]);
            } else if (pos == Constants.MODE_DIFFICULTY) {
                gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[5]);
                lvCategories.setVisibility(View.VISIBLE);
            }
        }

        public void onNothingSelected(AdapterView<?> parent) {
        }
    });

    btnPlay.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            int spinnerPosition = spinner.getSelectedItemPosition();
            ArrayList<String> cat = new ArrayList<>();
            if (spinnerPosition == Constants.MODE_MILLIONAIRE) {
                goToPlayingFragmentWithCategories(cat, Constants.MODE_MILLIONAIRE);
            } else if (spinnerPosition == Constants.MODE_20QUESTIONS) {
                goToPlayingFragmentWithCategories(cat, Constants.MODE_20QUESTIONS);
            } else if (spinnerPosition == Constants.MODE_CATEGORIES) {
                for (int i = 0; i < checkedCategories.length; i++) {
                    if (checkedCategories[i]) {
                        cat.add(categories.get(i));
                    }
                }
                goToPlayingFragmentWithCategories(cat, Constants.MODE_CATEGORIES);
                Arrays.fill(checkedCategories, false);
                System.out.println();
            } else if (spinnerPosition == Constants.MODE_60SECONDS) {
                goToPlayingFragmentWithCategories(cat, Constants.MODE_60SECONDS);
            } else if (spinnerPosition == Constants.MODE_UNLIMITED) {
                goToPlayingFragmentWithCategories(cat, Constants.MODE_UNLIMITED);
            } else if (spinnerPosition == Constants.MODE_DIFFICULTY) {
                String diff = "";
                for (int i = 0; i < 3; i++) {
                    if (checkedDifficulty[i]) {
                        diff = difficultyLevels.get(i);
                    }
                }
                goToPlayingFragmentWithCategories(cat, Constants.MODE_DIFFICULTY, diff);
            }
            dismiss();
        }
    });

    Button btnBack = (Button) view.findViewById(R.id.btn_game_mode_back);
    btnBack.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            dismiss();
        }
    });
}
public类SelectGameModeDialogFragment扩展DialogFragment{
boolean[]checkedCategories=新布尔值[Constants.CATEGORIES.length+1];
boolean[]checkedDifficulty=新的boolean[Constants.defficure_LEVELS.length+1];
列表类别=新建ArrayList();
列表困难级别=新建ArrayList();
TextView gameInfoTV;
纺纱机;
公共静态SelectGameModeDialogFragment newInstance(字符串标题){
SelectGameModeDialogFragment frag=新建SelectGameModeDialogFragment();
Bundle args=新Bundle();
args.putString(“title”,title);
frag.setArguments(args);
frag.setStyle(DialogFragment.STYLE_NO_FRAME,0);
返回碎片;
}
@可空
@凌驾
创建视图时的公共视图(LayoutFlater充气机、@Nullable ViewGroup容器、Bundle savedInstanceState){
getDialog().getWindow().setBackgroundDrawable(新的ColorDrawable(Color.TRANSPARENT));
categories.addAll(Arrays.asList(Constants.categories));
addAll(Arrays.asList(Constants.coverity_LEVELS));
返回充气机。充气(右布局。选择游戏模式,容器);
}
@凌驾
已创建视图上的公共void(视图,@Nullable Bundle savedInstanceState){
super.onViewCreated(视图,savedInstanceState);
最终ListView lvCategories=(ListView)view.findViewById(R.id.lv\u select\u cats);
gameInfoTV=(TextView)view.findviewbyd(R.id.tv\u game\u info);
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[0]);
final TextView proTV=(TextView)view.findViewById(R.id.tv\u overlay\u pro);
最终按钮btnPlay=(按钮)视图.findViewById(R.id.btn\u重新启动\u游戏);
spinner=(spinner)view.findViewById(R.id.spinner\u gamer\u categories);
ArrayAdapter=ArrayAdapter.createFromResource(getActivity(),R.array.game_类型_微调器,R.layout.spinner_项);
adapter.setDropDownViewResource(R.layout.spinner\u下拉项);
旋转器。设置适配器(适配器);
spinner.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
已选择公共位置(AdapterView父项、视图、整数位置、长id){
if(pos==Constants.MODE\u百万富翁
||pos==常数。模式不受限制
||pos==常量。模式\u 20问题
||pos==常数。模式(60秒){
ViewGroup.LayoutParams params=lvCategories.getLayoutParams();
参数高度=0;
lvCategories.setLayoutParams(params);
proTV.setVisibility(视图已消失);
}else if(pos==常量。模式\类别){
MultipleCategoryListAdapter=新的MultipleCategoryListAdapter(getActivity(),categories);
lvCategories.setAdapter(适配器);
ViewGroup.LayoutParams params=lvCategories.getLayoutParams();
params.height=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,200,getResources().getDisplayMetrics());
lvCategories.setLayoutParams(params);
}else if(pos==常量。模式_){
SingleCategoryListAdapter=新的SingleCategoryListAdapter(getActivity(),困难级别);
lvCategories.setAdapter(适配器);
ViewGroup.LayoutParams params=lvCategories.getLayoutParams();
params.height=(int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,80,getResources().getDisplayMetrics());
lvCategories.setLayoutParams(params);
}
lvCategories.setVisibility(View.INVISIBLE);
if(pos==常量。模式\u百万富翁){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[0]);
}else if(pos==常量。模式\u 20问题){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[1]);
}else if(pos==常量。模式\类别){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[2]);
lvCategories.setVisibility(View.VISIBLE);
}else if(pos==常数模式60秒){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[3]);
}else if(pos==常数。模式_无限制){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[4]);
}else if(pos==常量。模式_){
gameInfoTV.setText(getResources().getStringArray(R.array.game_types_info)[5]);
lvCategories.setVisibility(View.VISIBLE);
}
}
未选择公共无效(AdapterView父级){
}
});
btnPlay.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
int spinnerPosition=spinner.getSelectedItemPosition();
ArrayList cat=新的ArrayList();
if(喷丝头位置==常数。模式\u百万富翁){
goToPlayingFragmentWithCategories(cat、Constants.MODE\u百万富翁);
}else if(喷丝头位置==常数。模式\u 20问题){
goToPlayingFragmentWithCategories(类别、常数、模式和问题);
}else if(喷丝头位置==常数。模式\类别){
对于(int i=0;i<?xml version="1.0" encoding="utf-8"?>
<CheckBox
        android:id="@+id/cb_row_item"
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:text="Category name goes here"
        android:textSize="15sp"/>