почему метод isChecked () не работает с моим массивом - PullRequest
0 голосов
/ 16 апреля 2020

Итак, моя проблема в том, что ... почему метод 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 голосов
/ 17 апреля 2020

вам нужно создать флажок внутри макета элемента представления для каждого элемента в вашем массиве. Здесь является примером

, вы можете получить список заказов с помощью определенного метода внутри класса адаптера. Что-то вроде этого:

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();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...