2016-10-03 1 views
0

I Ansicht dynamisch durch for-Schleife angelegt haben. Es enthält auch mehrere Spinner. Ich habe onItemSelectedListener verwendet, damit der Spinner den Wert auswählt. Jedes Mal, wenn Benutzer klicken Spinner ich einige Logik verwendet haben, den Spinner Wert in der Datenbank zu speichern, aber onItemSelectedListener heißt noch vor den Spinner innerhalb der for-Schleife klicken.Wie for-Schleife für den Spinner nach innen setzen onitemSelectedListener

Wie könnte Methoden Spinner werden nur aufgerufen, wenn darauf geklickt wird, aber nicht für jeden für Schleifeniterationslatenzzeit?

//set the questions for the user dynamically with the for loop 
    for (int ss = 0; ss < totalNoOfQuestions.size(); ss++) { 
     pos = ss; 
     final List<String> list = new ArrayList(); 
     list.add("SELECT"); 
     TextView textView = new TextView(activity); 
     textView.setTextSize(15); 
     textView.setTextColor(view.getResources().getColor(R.color.black)); 
     textView.setTypeface(typeface1); 
     LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT); 
     params.setMargins(0, 20, 0, 0); 
     textView.setLayoutParams(params); 

     String questText = totalNoOfQuestions.get(ss).getParagraphQuestion(); 
     final String questionNum = totalNoOfQuestions.get(ss).getQuestionNo(); 
     String question = totalNoOfQuestions.get(ss).getQuestions(); 
     textView.setText(questText + " " + questionNum + " " + question); 

     spinner[ss] = new Spinner(activity); 
     for (int i = 0; i < totalNoOfQuestions.get(0).getOptions().size(); i++) { 
      String option = totalNoOfQuestions.get(0).getOptions().get(i).getQuestionOptionNo(); 
      list.add(option); 
     } 
     spinner[ss].setId(ss); 
     spinner[ss].setMinimumWidth(100); 

     //spinner.setBackground(activity.getResources().getDrawable(R.drawable.background_gradient)); 
     arrayAdapter = new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_dropdown_item, list); 
     spinner[ss].getBackground().setColorFilter(Color.parseColor("#000000"), PorterDuff.Mode.SRC_ATOP); 
     //spinner.setBackground(activity.getResources().getDrawable(R.drawable.background_gradient)); 
     spinner[ss].setAdapter(arrayAdapter); 

     //retrieve value from the database if user already selected 
     List<QuestionsNAnswers> inventories = getAll(); 
     for(int k = 0 ; k<inventories.size() ;k++){ 
      QuestionsNAnswers questionsNAnswers = inventories.get(k); 
      String quesNo = questionsNAnswers.questionNo; 
      spinner[ss].setSelection(Integer.parseInt(quesNo)); 
     } 

     final int finalSs = ss; 
     spinner[ss].setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

       // Toast.makeText(activity, "You Selected " + selection, Toast.LENGTH_SHORT).show(); 
       int spinnerId = spinner[finalSs].getId(); 
       questionNo = totalNoOfQuestions.get(spinnerId).getQuestionNo(); 
       optionNo = spinner[finalSs].getItemAtPosition(position).toString(); 

       //save the options in the database 
       QuestionsNAnswers questionsNAnswers = new QuestionsNAnswers(); 
       questionsNAnswers.questionNo = questionNo; 
       questionsNAnswers.optionSelected = optionNo; 
       //save the records in the database 
       questionsNAnswers.save(); 


      } 

      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
      } 
     }); 
     linearLayoutForQuestions.addView(textView); 
     linearLayoutForQuestions.addView(spinner[ss]); 
    } 

Antwort

0

Es ist nicht die beste Lösung, aber sollte funktionieren. Mit einem Zuhörer ontouchlistener, die einen gewissen Wert und Perform auf Spinner ändern. Dann innen Spinner, einen Mehrwert nur auf den db, wenn der Wert wahr ist und Wert zurückgesetzt.

Verwandte Themen