Получить все выбранные вещи от Spinner в программе переработчика Android - PullRequest
0 голосов
/ 01 июля 2019

Я использовал Spinner в Recyclerview . У меня есть одна кнопка в Mainacctivity. когда я нажимаю эту кнопку, мне нужно получить все выбранные элементы из каждой строки в представлении реселлера. Метод getSelectedItem () вернет выбранный элемент из счетчика, но я думаю, что только для одного элемента он работает. Я думаю, что нет необходимости использовать setOnItemSelectedListener .

Мой код:

public class MainActivity extends AppCompatActivity {


RecyclerView recycler_view;
Button button;

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

    recycler_view=findViewById(R.id.recycler_view);
    button = findViewById(R.id.button);

    RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(this);
    recycler_view.setLayoutManager(mLayoutManager);
    setAdapter();
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

        }
    });
}





private void setAdapter( ) {

        recycler_view.setVisibility(View.VISIBLE);
        StudentsListAdapter studentsListAdapter = new StudentsListAdapter(this);
        recycler_view.setAdapter(studentsListAdapter);
        // runLayoutAnimation(recycler_view, mSelectedItem);


}
}

адаптер:

public class StudentsListAdapter extends RecyclerView.Adapter<StudentsListAdapter.MyViewHolder> {


String[] list={"Microbiology","Pharmacology","Microbiology","Forensic Medicine"};

String[] studentsName={"Student1","Student2","Studen3","Student4"};

Context ctx;

private ArrayAdapter<String> dataAdapter;

    public class MyViewHolder extends RecyclerView.ViewHolder {



    @BindView(R.id.text_name)
    TextView text_name;


    @BindView(R.id.spinner1)
    Spinner spinner1;

    MyViewHolder(View view) {
        super(view);
        ButterKnife.bind(this, view);
    }
}

public StudentsListAdapter(Context ctx ) {
    this.ctx = ctx;

}

@NonNull
@Override
     public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.student_list_item, parent, false);

    return new MyViewHolder(itemView);
}

@SuppressLint("SetTextI18n")
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {

    holder.text_name.setText(studentsName[position]);


    dataAdapter = new ArrayAdapter<String>(ctx, R.layout.spinner_item, list);
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    holder.spinner1.setAdapter(dataAdapter);
    Log.d("Holder ",""+ holder.spinner1.getSelectedItem());
}

@Override
public int getItemCount() {
    return studentsName.length;
}

 }

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Используйте другой список с размером списка Spinner и добавьте значения по умолчанию для каждого счетчика в список. Всякий раз, когда вы изменяете значение в счетчике, также меняйте значение в списке выбранных значений.

Теперь добавьте новый метод в адаптер, чтобы получить список выбранных значений. и вызвать этот метод по нажатию кнопки

0 голосов
/ 01 июля 2019

Полагаю, вам нужно добавить флажок, чтобы узнать, какие элементы выбраны.

Arraylist selectedStudent = new Arraylist();

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, @SuppressLint("RecyclerView") final int position) {

        holder.text_name.setText(studentsName[position]);


        dataAdapter = new ArrayAdapter<String>(ctx, R.layout.spinner_item, list);
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        holder.spinner1.setAdapter(dataAdapter);
            Log.d("Holder ",""+ holder.spinner1.getSelectedItem());

        //checkbox listener
        holder.checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if (isChecked){
            selectedStudent.add(studentsName[position]);
        }
    }

});
        }

В своей деятельности вы можете получить доступ к своей переменной selectedStudent

 StudentsListAdapter studentListAdapter;

    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              for (int i = 0; i < studentListAdapter.selectedStudent.size()-1 ; i++) {
              Log.d("studentSelected".""+studentListAdapter.selectedStudent.get(i));
        }
            }
        });
...