为什么isChecked()方法不能与我的数组一起使用

时间:2020-04-16 20:37:54

标签: android firebase android-recyclerview

所以我的问题是..为什么 isChecked 方法不起作用。

我对我的问题的第一个猜测将是声明错误的数组? 我的第二个猜测是我缺少通话内容或缺少通话内容?

我的代码的目标是在firebase中创建一个收集器,然后将其记录在收集器的数据库中,用户可以通过该数据库从多个选定的工作订单中进行选择

public class MainActivity extends AppCompatActivity {

private List<Model> mModelList;
private RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;

Button mjobOrderBtn;
FirebaseAuth fAuth;
FirebaseFirestore fStore;
String jobId;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_recyclerview);

    mjobOrderBtn = findViewById(R.id.jobOrderBtn);
    mRecyclerView = findViewById(R.id.recycler_view);
    mAdapter = new RecyclerViewAdapter(getListData());
    LinearLayoutManager manager = new LinearLayoutManager(MainActivity.this);
    mRecyclerView.setHasFixedSize(true);
    mRecyclerView.setLayoutManager(manager);
    mRecyclerView.setAdapter(mAdapter);

    fAuth = FirebaseAuth.getInstance();
    fStore = FirebaseFirestore.getInstance();
    jobId = fAuth.getCurrentUser().getUid();

    DocumentReference documentReference = fStore.collection("job order").document(jobId);

    mjobOrderBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (mRecyclerView.isChecked()){

            }
        }
    });

}

private List<Model> getListData() {
    mModelList = new ArrayList<>();

    mModelList.add(new Model("Flat Tire "));
    mModelList.add(new Model("Towing "));
    mModelList.add(new Model("Battery "));
    mModelList.add(new Model("Empty Gas "));




    return mModelList;
}
}  

RecyclerViewAdaptor.java

class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> {

private List<Model> mModelList;

public RecyclerViewAdapter(List<Model> modelList) {
    mModelList = modelList;
}

@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.activity_itemrow, parent, false);
    return new MyViewHolder(view);
}

@Override
public void onBindViewHolder(final MyViewHolder holder, int position) {
    final Model model = mModelList.get(position);
    holder.textView.setText(model.getText());
    holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE);
    holder.textView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            model.setSelected(!model.isSelected());
            holder.view.setBackgroundColor(model.isSelected() ? Color.CYAN : Color.WHITE);
        }
    });
}

@Override
public int getItemCount() {
    return mModelList == null ? 0 : mModelList.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    private View view;
    private TextView textView;

    private MyViewHolder(View itemView) {
        super(itemView);
        view = itemView;
        textView = itemView.findViewById(R.id.text_view);
    }
}
}

这也是模型类

Model.java

public class Model {

private String text;
private boolean isSelected = false;

public Model(String text) {

    this.text = text;
}

public String getText() {

    return text;
}

public void setSelected(boolean selected) {

    isSelected = selected;
}


public boolean isSelected() {

    return isSelected;
}
}

1 个答案:

答案 0 :(得分:0)

您需要在数组的每个项目的视图项目布局内部创建复选框。 Here是一个例子

您可以在适配器类中使用已定义的方法获取订单列表。像这样:

public List<Model> getSelectedItems(){
    List<Model> results = new ArrayList<Model>();
    for(model: mModelList){
       if(model.isSelected()){
          results.add(model);
      }
    }
    return results;
}

在按钮顺序单击方法内,只需将其删除即可:

mjobOrderBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        List<Model> orderList = mAdapter.getSelectedItems();
    }
});