I'm creating an app for Quiz. I populated the listview with radio buttons but on
clicking on any radio button same button in next fourth rows are selecting automatically.
Here is my code MainActivity.java
public class MainActivity extends AppCompatActivity {
String ques_pdf;
PDFView pdfView;
String url = "api.abc.com"
private List<VideoListDataItem> dataFeed= new ArrayList<VideoListDataItem>();
ListView listView;
String test_id,marked_answer;
String q_no;
@Nullable
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pdfView = (PDFView)findViewById(R.id.question_pdf);
final ArrayAdapter<VideoListDataItem> adapter = new MainActivity.Adapter();
listView = findViewById(R.id.listview_answers);
RequestQueue queue = Volley.newRequestQueue(getApplicationContext());
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONArray temp = response.getJSONArray("mock_test_pt");
for (int i = 0; i < temp.length(); i++) {
JSONObject buffer = temp.getJSONObject(i);
String marks_correct_ans= buffer.getString("marks_correct_ans");
String negative_mark= buffer.getString("negative_mark");
String duration = buffer.getString("duration");
ques_pdf = buffer.getString("ques_pdf");
String total_question = buffer.getString("total_question");
test_id = buffer.getString("id");
Log.i(" Test id",buffer.getString("id"));
int total_questions = Integer.parseInt(total_question);
for (int j=1;j<=total_questions;j++) {
dataFeed.add(new VideoListDataItem("" + j, "", "", "", "", ""));
adapter.notifyDataSetChanged();
}
new RetrievePDF().execute(ques_pdf);
Log.i("ques_pdf",ques_pdf);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(jsonObjectRequest);
Log.i("Test paper","After loading pdf");
JsonObjectRequest jsonObjectRequest2 = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.i("Answer", "" + response.toString());
JSONArray temp = response.getJSONArray("subject_wise_test_ans");
for (int i = 0; i < temp.length(); i++) {
JSONObject buffer = temp.getJSONObject(i);
JSONObject answer = buffer.getJSONObject("answer");
String id= buffer.getString("id");
String test_id1= buffer.getString("test_id");
Log.i("Test Id in answer",test_id1);
String subject_name = buffer.getString("subject_name");
String marks_pluse = buffer.getString("marks_pluse");
String marks_minus = buffer.getString("marks_minus");
String answer_set = buffer.getString("answer");
q_no = buffer.getString("question_no");
String temp_string;
temp_string=test_id;
Log.i("Answer API",answer.toString());
if (test_id1.equals(test_id) ) {
// Toast.makeText(getApplicationContext(), "Matched!!!", Toast.LENGTH_SHORT).show();
break;
}
}
Log.i("QID",test_id);
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
}
});
jsonObjectRequest2.setRetryPolicy(new DefaultRetryPolicy(10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
queue.add(jsonObjectRequest2);
listView.setAdapter( adapter);
}
private class Adapter extends ArrayAdapter<VideoListDataItem> {
public Adapter() {
super(MainActivity.this, R.layout.sample_answer_fragment,dataFeed);
}
@NonNull
@Override
public View getView(final int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null)
{
convertView = getLayoutInflater().inflate(R.layout.sample_answer_fragment,null,false);
}
VideoListDataItem currentItem = dataFeed.get(position);
final RadioGroup radioGroup = (RadioGroup)convertView.findViewById(R.id.radiogroup);
ImageView removeAnswer = (ImageView)convertView.findViewById(R.id.del_option);
removeAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
radioGroup.clearCheck();
}
});
final TextView question_no = (TextView) convertView.findViewById(R.id.serial_option);
final RadioButton radioButtonA = (RadioButton)convertView.findViewById(R.id.optionA) ;
final RadioButton radioButtonB = (RadioButton)convertView.findViewById(R.id.optionB) ;
final RadioButton radioButtonC = (RadioButton)convertView.findViewById(R.id.optionC) ;
final RadioButton radioButtonD = (RadioButton)convertView.findViewById(R.id.optionD) ;
final RadioButton[] radioButton = new RadioButton[1];
final int[] selectedId = new int[1];
final View finalConvertView = convertView;
question_no.setText(currentItem.getId());
// radioButtonA.setTag(position);
radioButtonA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
marked_answer = radioButtonA.getText().toString();
Toast.makeText(getApplicationContext(), question_no.getText().toString()+" "+marked_answer+" "+position, Toast.LENGTH_SHORT).show();
// databaseHelper.saveAnswer(question_no.getText().toString(),test_id,marked_answer);
}
});
radioButtonB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
marked_answer = radioButtonB.getText().toString();
Toast.makeText(getApplicationContext(), question_no.getText().toString()+" "+marked_answer+" "+position, Toast.LENGTH_SHORT).show();
// databaseHelper.saveAnswer(question_no.getText().toString(),test_id,marked_answer);
}
});
radioButtonC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
marked_answer = radioButtonC.getText().toString();
Toast.makeText(getApplicationContext(), question_no.getText().toString()+" "+marked_answer+" "+position, Toast.LENGTH_SHORT).show();
//databaseHelper.saveAnswer(question_no.getText().toString(),test_id,marked_answer);
}
});
radioButtonD.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
marked_answer = radioButtonA.getText().toString();
Toast.makeText(getApplicationContext(), question_no.getText().toString()+" "+marked_answer+" "+position, Toast.LENGTH_SHORT).show();
//
}
});
// final RadioButton[] radioButton = new RadioButton[1];
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
Toast.makeText(getApplicationContext(),question_no.getText().toString() , Toast.LENGTH_SHORT).show();
//
}
});
return convertView;
}
}
class RetrievePDF extends AsyncTask<String,Void,InputStream>
{
@Override
protected InputStream doInBackground(String... strings) {
InputStream inputStream=null;
try{
URL url = new URL(strings[0]);
HttpURLConnection httpURLConnection = (HttpURLConnection)url.openConnection();
if (httpURLConnection.getResponseCode()==200)
{
inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
}
}
catch (Exception e){
Log.i("PDF Async Exception",e.toString());
}
return inputStream;
}
@Override
protected void onPostExecute(InputStream inputStream) {
pdfView.fromStream(inputStream).load();
}
}
}
code for sample_answer_fragment.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/serial_option"
android:text="1"
android:layout_margin="10dp"/>
<RadioGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/radiogroup">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A"
android:id="@+id/optionA"
android:layout_margin="10dp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B"
android:id="@+id/optionB"
android:layout_margin="10dp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C"
android:id="@+id/optionC"
android:layout_margin="10dp"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="D"
android:id="@+id/optionD"
android:layout_margin="10dp"/>
<ImageView
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginRight="10dp"
android:layout_marginTop="10dp"
android:src="@drawable/ic_launcher_background"
android:id="@+id/del_option"
android:textAlignment="viewEnd"
android:gravity="end" />
</RadioGroup>
</LinearLayout>
Everything is working fine in this code except radio buttons. Radio button of different rows are getting selected automatically