Как получить TextViews внутри Recycler View и отправить его в другое действие и добавить его в значения массива - PullRequest
0 голосов
/ 11 октября 2019

Я не могу получить каждое Textviews, такое как «Отсутствует», «Настоящее время» и «Извините» внутри RecyclerView, но TextView имеет только один идентификатор. Как я могу получить все TextView в RecyclerView. Вот мой код в моем Activity.

Это скриншот моего приложения.

enter image description here

Это мой MainActivity.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_adapter);
    final TextView dates,blocks;
    blocks=findViewById(R.id.blocks);
    dates=findViewById(R.id.dates);
    database =FirebaseDatabase.getInstance();
    submit=findViewById(R.id.sumbitBrn);
    final String block = getIntent().getExtras().getString("Block");
    final String date = getIntent().getExtras().getString("Date");
    blocks.setText(block);
    dates.setText(date);
    swipeRefreshLayout = findViewById(R.id.refresh);

    exampleList =  new ArrayList<>();
    values = new ArrayList<>();

    myReff = FirebaseDatabase.getInstance().getReference("Section").child(block);
    myReff.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            for(DataSnapshot students:dataSnapshot.getChildren()){
                Students students1 = students.getValue(Students.class);
                exampleList.add(students1);
            }
        }   

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });



    mRecyclerView = findViewById(R.id.recyclerView);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new ExampleAdapter(exampleList);
    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);

    swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
        @Override
        public void onRefresh() {
            mRecyclerView = findViewById(R.id.recyclerView);
            mRecyclerView.setHasFixedSize(true);
            mLayoutManager = new LinearLayoutManager(MainAdapter.this);
            mAdapter = new ExampleAdapter(exampleList);
            mRecyclerView.setLayoutManager(mLayoutManager);
            mRecyclerView.setAdapter(mAdapter);
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    swipeRefreshLayout.setRefreshing(false);
                }
            },4000);
        }
    });

    submit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            myReff =database.getReference("Date").child(dates.getText().toString()).child(blocks.getText().toString());

            // I WILL INSERT HERE THE CODE FOR GETTING THE TEXTVIEWS INSIDE THE RECYCLER
            Toast.makeText(MainAdapter.this,"SUCCESS!",Toast.LENGTH_LONG).show();
        }
    });

А это мой класс Адаптера. Я использую здесь группу Радио, чтобы установить текст в RecyclerView, но я не знаю, чтобы получать каждые TextView с.

private ArrayList<Students> mExampleList;

public static class ExampleViewHolder extends RecyclerView.ViewHolder{
    public RadioGroup radioGroup;
    public TextView mTextView1;
    public TextView result;
    public ExampleViewHolder(@NonNull View itemView) {
        super(itemView);
        radioGroup = itemView.findViewById(R.id.allRadioButton);
        mTextView1 = itemView.findViewById(R.id.textView);
        result = itemView.findViewById(R.id.res);
    }
}

public ExampleAdapter(ArrayList<Students>exampleList) {
    mExampleList = exampleList;
 }

@NonNull
@Override
public ExampleViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.items, parent, false);
    ExampleViewHolder evh = new ExampleViewHolder(v);
    return evh;
}

@Override
public void onBindViewHolder(@NonNull final ExampleViewHolder holder, int position) {
    Students currentItem = mExampleList.get(position);

    holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int i) {
            switch (i){
                case R.id.present:
                    holder.result.setText("Present");
                              break;
                case R.id.absent:
                    holder.result.setText("Absent");
                    break;
                case R.id.excuse:
                    holder.result.setText("Excuse");
                    break;
            }
        }
    });
    holder.mTextView1.setText(currentItem.getName());
}

@Override
public int getItemCount() {

    return mExampleList.size();
}

1 Ответ

0 голосов
/ 11 октября 2019

Таким образом, вы можете рассмотреть наличие массива, который должен отслеживать данные в вашем RecyclerView. В вашем адаптере рассмотрите возможность создания массива, как показано ниже.

private int[] attendance = new int[list.size()]; // The idea is to initialize the array having the same size as your list 
private final int PRESENT = 0;
private final int ABSENT = 1;
private final int EXCUSE = 2;

Теперь в слушателе проверки поместите правильные значения в массив, указывающий статус посещаемости.

holder.radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup radioGroup, int i) {
        switch (i){
            case R.id.present:
                holder.result.setText("Present");
                attendence[position] = PRESENT;
                break;
            case R.id.absent:
                holder.result.setText("Absent");
                attendence[position] = ABSENT;
                break;
            case R.id.excuse:
                holder.result.setText("Excuse");
                attendence[position] = EXCUSE;
                break;
            case default:
                holder.result.setText("Present");
                attendence[position] = PRESENT;
                break;
        }
    }
});

Теперь передайте массив следующему действию или классу, когда это необходимо. Надеюсь, это поможет!

...