已阅读:
recyclerview中的radiogroup
在listview中显示radiogroup
recyclerview中的radiogroup不正确
你好
我正在使用recylerview创建一个mcq应用程序,其中我有问题、4个单选按钮和提交按钮。我的程序在提交时也有正确的应答。单击单选按钮并单击提交按钮,如果答案正确,我会将正确的单选按钮背景更改为绿色和红色,表示回答错误
现在的问题是,有多个问题和多个提交按钮,当我点击第一个问题正确单选按钮时,它会改变其背景红色,所有问题相同,但最后一个除外。
对于最后的问题,它给出了正确和错误答案的正确背景
关于我的问题:https://ibb.co/lzqsvnz 在gif中,第一个问题ww2是正确的,但代码将其颜色更改为红色,第二个问题是最后一个问题给出了正确的结果
我的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_marginTop="10dp"
android:layout_width="match_parent"
android:background="@color/white"
android:layout_height="wrap_content">
<RelativeLayout
android:background="@color/white"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:weightSum="2"
android:id="@+id/newlinear1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:layout_weight="1"
android:id="@+id/question"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/question"
android:textColor="@color/black"
android:textAllCaps="true"
android:textAlignment="center"
android:textStyle="bold">
</TextView>
<ImageView
android:layout_gravity="center"
android:visibility="gone"
android:src="@mipmap/ic_launcher_round"
android:layout_weight="1"
android:id="@+id/QuestionImage"
android:layout_width="match_parent"
android:layout_height="300dp">
</ImageView>
</LinearLayout>
<LinearLayout
android:background="@drawable/linear"
android:id="@+id/linear2"
android:layout_marginTop="10dp"
android:layout_below="@id/newlinear1"
android:layout_width="match_parent"
android:layout_margin="40dp"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center">
<RadioGroup
android:id="@+id/radioPostGroup"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:layout_marginTop="25dp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/answer1"
android:id="@+id/radioAnswer1">
</RadioButton>
<RadioButton
android:layout_marginTop="25dp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/answer2"
android:id="@+id/radioAnswer2">
</RadioButton>
<RadioButton
android:layout_marginTop="25dp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/answer3"
android:id="@+id/radioAnswer3">
</RadioButton>
<RadioButton
android:layout_marginTop="25dp"
android:textColor="@color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/answer4"
android:id="@+id/radioAnswer4">
</RadioButton>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:id="@+id/linear3"
android:layout_below="@id/linear2"
android:orientation="horizontal"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/submitAnswer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Submit">
</Button>
<!-- <View-->
<!-- -->
<!-- android:layout_width="fill_parent"-->
<!-- android:layout_weight="2"-->
<!-- android:layout_height="10dp"-->
<!-- android:layout_marginTop="0.5dp"-->
<!-- android:background="@color/purple"/>-->
</LinearLayout>
<LinearLayout
android:id="@+id/mylinear4"
android:layout_below="@id/linear3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<com.like.LikeButton
android:layout_weight="1"
app:icon_type="heart"
app:icon_size="10dp"
android:id="@+id/myheart"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.like.LikeButton>
<com.like.LikeButton
android:layout_weight="1"
app:icon_type="thumb"
app:icon_size="10dp"
android:id="@+id/mythumb"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.like.LikeButton>
<com.like.LikeButton
android:layout_weight="1"
app:icon_type="star"
app:icon_size="10dp"
android:id="@+id/myStar"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</com.like.LikeButton>
</LinearLayout>
<View
android:layout_below="@+id/mylinear4"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/black">
</View>
</RelativeLayout>
</RelativeLayout>
我的回收视图:
package com.example.mcqapp.activities.Adapters;
import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.example.mcqapp.R;
import com.example.mcqapp.activities.Models.RequestDataModel;
import com.example.mcqapp.activities.Models.RetrieveModel;
import com.example.mcqapp.activities.forms.QuestionData;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import com.like.LikeButton;
import com.like.OnLikeListener;
import org.jetbrains.annotations.NotNull;
import org.w3c.dom.Text;
import java.util.HashMap;
import java.util.List;
public class finalAdapter extends RecyclerView.Adapter<finalAdapter.MyHolder> {
private List<QuestionData> dataset;
private Context context;
private DatabaseReference heartReference;
private int counter = 0;
boolean testCick = false;
private RadioButton radioButton;
private String CorrectAnswer;
public finalAdapter(List<QuestionData> dataset,Context context){
this.dataset = dataset;
this.context = context;
}
@NotNull
@Override
public MyHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
View view = layoutInflater.inflate(R.layout.recyclerquestions,parent,false);
MyHolder myHolder = new MyHolder(view);
return myHolder;
}
@Override
public void onBindViewHolder(@NonNull @NotNull finalAdapter.MyHolder holder, int position) {
holder.question.setText(dataset.get(position).getQuestion());
holder.radioButton1.setText(dataset.get(position).getAnswer1());
holder.radioButton2.setText(dataset.get(position).getAnswer2());
holder.radioButton3.setText(dataset.get(position).getAnswer3());
holder.radioButton4.setText(dataset.get(position).getAnswer4());
CorrectAnswer = dataset.get(position).getCorrectAnswer();
String im = dataset.get(position).getImageLink();
if (im != null){
holder.imageView.setVisibility(View.VISIBLE);
Glide.with(context).load(dataset.get(position).getImageLink()).into(holder.imageView);
}
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
String userID = firebaseUser.getUid();
Log.d("userid", "onBindViewHolder: "+ userID);
String posKey = dataset.get(position).getKey();
// final FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance().getReference("likes");
// final DatabaseReference databaseReference = mFirebaseDatabase.getReference("Questions").child(dataset.get(position).getGroup()).child(dataset.get(position).getKey());
holder.getheartButtonStatus(posKey,userID);
DatabaseReference likesReference = FirebaseDatabase.getInstance().getReference("Likes");
// HashMap<String, Object> result = new HashMap<>();
holder.heart.setOnLikeListener(new OnLikeListener() {
@Override
public void liked(LikeButton likeButton) {
testCick = true;
likesReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
if (testCick==true){
if (snapshot.child(posKey).hasChild(userID)){
// likesReference.child(posKey).removeValue();
// holder.heart.setLiked(true);
testCick =false;
}else{
likesReference.child(posKey).child(userID).setValue(true);
testCick = false;
}
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
}
@Override
public void unLiked(LikeButton likeButton) {
likesReference.child(posKey).removeValue();
testCick =false;
}
});
}
@Override
public int getItemCount() {
return dataset.size();
}
public class MyHolder extends RecyclerView.ViewHolder{
TextView question;
RadioButton radioButton1,radioButton2,radioButton3,radioButton4;
ImageView imageView;
LikeButton heart,thumb,star;
RadioGroup radioGroup;
private Button Button;
public MyHolder(View itemView){
super(itemView);
radioGroup = itemView.findViewById(R.id.radioPostGroup);
question = (TextView) itemView.findViewById(R.id.question);
radioButton1 = itemView.findViewById(R.id.radioAnswer1);
radioButton2 = itemView.findViewById(R.id.radioAnswer2);
radioButton3 = itemView.findViewById(R.id.radioAnswer3);
radioButton4 = itemView.findViewById(R.id.radioAnswer4);
imageView = itemView.findViewById(R.id.QuestionImage);
Button = itemView.findViewById(R.id.submitAnswer);
heart= itemView.findViewById(R.id.myheart);
thumb= itemView.findViewById(R.id.mythumb);
star= itemView.findViewById(R.id.myStar);
Button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int selectedId = radioGroup.getCheckedRadioButtonId();
Log.d("selected", "onClick: "+selectedId);
radioButton = itemView.findViewById(selectedId);
//**`problem is in this section`**
Toast.makeText(context.getApplicationContext(),radioButton.getText(),Toast.LENGTH_LONG).show();
if(radioButton.getText().equals(CorrectAnswer)){
radioButton.setBackgroundColor(Color.parseColor("#9ded9f"));
}else{
radioButton.setBackgroundColor(Color.parseColor("#990e0e"));
}
}
});
}
public void getheartButtonStatus(String posKey, String userID) {
heartReference = FirebaseDatabase.getInstance().getReference("Likes");
heartReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull @NotNull DataSnapshot snapshot) {
if (snapshot.child(posKey).hasChild(userID)){
int likeCount = (int)snapshot.child(posKey).getChildrenCount();
heart.setLiked(true);
}
}
@Override
public void onCancelled(@NonNull @NotNull DatabaseError error) {
}
});
}
}
}
1条答案
按热度按时间enyaitl31#
每次将数据绑定到viewholder时,都会设置
CorrectAnswer
达到一定的价值。问题是只有一个CorrectAnswer
它包含最后一个值绑定,可以是显示的任何内容,也可以是少数未显示的内容。您可以通过使用viewholder中的变量将正确答案与每个viewholder关联,或根据位置从数组中获取答案来解决此问题。
例如,在myholder中,定义成员变量如下:
删除全局
CorrectAnswer
变量然后,在
onBindViewHolder()
如下所示设置变量:现在,在click listener中,您可以检查所问问题的正确答案。每个myholder都包含它所代表的问题的答案。