Android Studio CheckBox 问题

Posted

技术标签:

【中文标题】Android Studio CheckBox 问题【英文标题】:Android Studio CheckBox Proble 【发布时间】:2021-10-05 23:39:16 【问题描述】:

我想用 CheckBox 从 Json 中按性别列出,但我得到的错误如下: Attempt to invoke virtual method 'void android.widget.CheckBox.setOnCheckedChangeListener(android.widget.CompoundButton$OnCheckedChangeListener)' on a null对象引用

        holder.ChechKadin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                if (holder.ChechKadin.isChecked())
                    Toast.makeText(context, "True", Toast.LENGTH_SHORT).show();

                else 
                    Toast.makeText(context, "False", Toast.LENGTH_SHORT).show();

                
            
        );

【问题讨论】:

【参考方案1】:

公共类 UserAdapter 扩展 RecyclerView.Adapter

DoctorsModel list;


Context context;
Activity activity;
ChangeFragments changeFragments;

public UserAdapter(DoctorsModel list ,Context context, Activity activity)  
    this.list = list;
    this.context = context;
    this.activity = activity;
    changeFragments = new ChangeFragments(context);


@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) 

    View view = LayoutInflater.from(context).inflate(R.layout.usersitemlayout, parent, false);
    return new ViewHolder(view);


@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) 

    holder.userName.setText(list.getDoctors().get(position).getFullName());
    Picasso.get().load(list.getDoctors().get(position).getImage().getUrl()).into(holder.userImage);



    holder.ChechKadin.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
            if (holder.ChechKadin.isChecked())
                Toast.makeText(context, "True", Toast.LENGTH_SHORT).show();

            else 
                Toast.makeText(context, "False", Toast.LENGTH_SHORT).show();

            
        
    );




@Override
public int getItemCount() 
    return list.getDoctors().size();


public class ViewHolder extends RecyclerView.ViewHolder 
    TextView userName;
    CircleImageView userImage;
    CheckBox ChechKadin,ChechErkek;


    public ViewHolder(View itemView) 
        super(itemView);

        userName = itemView.findViewById(R.id.userName);
        userImage = itemView.findViewById(R.id.userImage);
        ChechKadin = itemView.findViewById(R.id.CheckKadin);
        ChechErkek = itemView.findViewById(R.id.CheckErkek);

    

公共类用户片段扩展片段

private View view;
private ChangeFragments changeFragments;

private RecyclerView kullaniciRecylerView;
private DoctorsModel list;
private UserAdapter userAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.fragment_users, container, false);
    tanimla();
    getKullaniciler();
    return view;    

public void tanimla()


    changeFragments = new ChangeFragments(getContext());
    kullaniciRecylerView = view.findViewById(R.id.userRecylerView);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getContext(),1);
    kullaniciRecylerView.setLayoutManager(layoutManager);
    list = new DoctorsModel();



public void getKullaniciler()

     Call<DoctorsModel> req = ManagerAll.getInstance().getUser();
    req.enqueue(new Callback<DoctorsModel>() 
        @Override
        public void onResponse(Call<DoctorsModel> call, Response<DoctorsModel> response) 

         //  list = (DoctorsModel) response.body().getDoctors();
             list = response.body();
            userAdapter = new UserAdapter(list,getContext(),getActivity());
            Log.i("kullaniciler",response.body().toString());
            kullaniciRecylerView.setAdapter(userAdapter);
        
        @Override
        public void onFailure(Call<DoctorsModel> call, Throwable t) 

            Toast.makeText(getContext(), "HATAA:...!!", Toast.LENGTH_LONG).show();

        
    );

【讨论】:

【参考方案2】:

请分享您使用复选框的类代码(活动或适配器)。根据日志,它看起来像初始化问题。如果您在适配器类中使用,那么在 View Holder 中使用

this.ChechKadin = (CheckBox) itemView.findViewById(R.id.ChechKadin); // 检查是否初始化了复选框。

如果您使用的是活动内的复选框

ChechKadin =(CheckBox) findViewById(R.id.ChechKadin);

【讨论】:

以上是关于Android Studio CheckBox 问题的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio - CheckBox 使应用程序崩溃

Android Studio教程06-布局,监听器以及基本控件

Android中的checkBOX在代码中怎么设置至少选中一个?

android studio开发笔记四

Android Studio——常用组件练习之注册信息

Android studio实现多个按钮跳转多个页面