2017-03-21 10 views
0

각각에 대해 여러 개의 답변 옵션과 함께 질문 목록을 포함하는 기능을 포함하는 응용 프로그램을 만들고 있습니다. 이렇게하려면 각 항목에 응답 목록이있는 회 전자와 함께 질문을 표시하는 TextView가 들어있는 listview를 사용하고 있습니다. 각 목록보기 항목에서 현재 선택된 값의 회 전자를 검색하려고합니다. 이는 각 목록보기 항목에 대해 회 전자가 있고 질문 수가로드 될 때까지 필요한 회 전자의 수가 "알 수 없음"이라는 사실을 제외하면 일반적으로 쉽습니다.현재 선택된 목록보기 항목 회 전자 클릭 버튼 클릭

내 문제는 현재 선택한 각 스피너 항목의 값을 얻는 방법입니다. 현재는 첫 번째 스피너 항목의 가치 만 얻을 수 있습니다. 사용자 정의 어댑터 자체의

questionsList = new ArrayList<>(); 
    masterAnswersList = new ArrayList<>(); 
    //For all questions with the tech answer's group id, get questions 
    for(int k = 0; k < allQuestions.size(); k++) { 
     final int z = k; 
     //Each question for the tech 
     System.out.println("Question " + z + " " + allQuestions.get(z).getQuestionTitle()); 
     questionsList.add(new CompleteQuestions.ListViewItem() {{ 
      QUESTION = allQuestions.get(z).getQuestionTitle(); 
     }}); 

     int questionId = allQuestions.get(z).getQuestionId(); 
     //Get all possible answers for this question based on the question and the group id 
     allAnswers = db.getAllGroupAnswers(questionId, groupID, database); 
     answersList = new ArrayList<>(); 
     //For all answers for this question, add to arraylist 
     for(int j = 0; j < allAnswers.size(); j++) { 
      final int p = j; 
      answersList.add(new CompleteQuestions.ListViewItem() {{ 
       ANSWER = allAnswers.get(p).getAnswerTitle().trim(); 
      }}); 
     } 
     masterAnswersList.add(answersList); 
    } 
    adapter = new CompQuestionsAdapter(this, questionsList, masterAnswersList); 
    completeQuestionsListView.setAdapter(adapter); 


//For the number of items in the listview 
       for (int i = 0; i < completeQuestionsListView.getCount(); i++) { 
        //Update ticket questions table 
        String techChoice = CompQuestionsAdapter.spinner.getSelectedItem().toString(); 
        System.out.println("techChoice: " + techChoice); 
        //Get id of answer tech chose 
        int techAnswerId = db.getAnswerId(techChoice, database); 
        int questionId = allQuestions.get(i).getQuestionId(); 
        int groupId = db.getGroupId(techChoice, questionId, database); 
        System.out.println("Group id: " + groupId); 
        Ticket questionTicket = new Ticket(questionId, techAnswerId, ticketId, companyId, groupId, true); 
        db.addTicketQuestionResponse(questionTicket, context, database); 
       } 

그리고 부분 :이에

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 

    /** 
    * The database used to pull all ticket information 
    */ 
    final DatabaseHandler db = new DatabaseHandler(context); 
    final SQLiteDatabase database = db.getReadableDatabase(); 

    ListViewItem item = questions.get(position); 
    //ListViewItem item2 = answers.get(position).get(position); 
    View vi=convertView; 

    if(convertView==null) 
     vi = inflater.inflate(R.layout.comp_questions_view, null); 

    TextView question = (TextView)vi.findViewById(R.id.QUESTION); 
    question.setText("" + item.QUESTION); 

    spinner = (Spinner)vi.findViewById(R.id.ANSWERS); 
    List<String> strAnswers = new ArrayList<>(); 
    List<CompleteQuestions.ListViewItem> currentAnswers = answers.get(position); 
    for (int i = 0; i < currentAnswers.size(); i++) { 
     strAnswers.add(currentAnswers.get(i).ANSWER); 
    } 
    //Place all the cleared by codes in a string array used to populate the spinner 
    String[] strArrayAnswers = new String[strAnswers.size()]; 
    for(int i = 0; i < strAnswers.size(); i++) { 
     if(strAnswers.get(i) != null) { 
      strArrayAnswers[i] = strAnswers.get(i); 
     } 
    } 
    adapter = new ArrayAdapter<>(context, 
      android.R.layout.simple_spinner_item, strArrayAnswers); 
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(adapter); 

    List<String> selections = new ArrayList<>(); 
    selections.add(spinner.getSelectedItem().toString()); 
    System.out.println("Currently selected item: " + spinner.getSelectedItem()); 

    return vi; 
} 

어떤 도움도 대단히 감사하겠습니다 다음은 내 사용자 지정 어댑터를 사용하는 클래스에 대한 내 코드입니다.

당신이 당신의 어댑터 클래스는 항목이 위치에서 스피너에서 선택하고 무엇 된 부모 클래스에게 사용할 수 있도록 인터페이스를 정의하는 데 필요한 모든의

답변

1

첫 번째는 의 selectedItem입니다

OnSpinnerItemSelected 인터페이스

public interface OnSpinnerItemSelected { 
    void onItemSelected(int position, String selectedItem); 
} 

그런 다음 당신은 당신의 어댑터 생성자에서 하나 OnSpinnerItemSelected 개체를 전달해야합니다. custem 어댑터이 추가 사용하는 클래스에서

private OnSpinnerItemSelected onSpinnerItemSelected; 

public CompQuestionsAdapter(......, OnSpinnerItemSelected onSpinnerItemSelected) { 
    this.onSpinnerItemSelected = onSpinnerItemSelected; 
} 

: 그것은 분명하지 않다 경우 (의 getView 메서드에서) 어댑터 호출 onItemSelected 방법

adapter = new CompQuestionsAdapter(this, questionsList, masterAnswersList, new OnSpinnerItemSelected() { 
     @Override 
     public void onItemSelected(int position, String selectedItem) { 

     } 
    }); 

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 

      onSpinnerItemSelected.onItemSelected(position, adapterView.getAdapter().getItem(i)); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> adapterView) { 

     } 
    }); 

그냥 알려주세요 .

+0

나는 단추를 누를 때 호출되는 onClickListener에서 어떻게 호출 할 수 있습니까? –

+0

신경 쓰지 마, 알아 냈어. 정말 고마워요, 이것에 너무 많은 시간을 보냈습니다! –

+0

나는 이것이 다른 질문이지만, 가능하다면이 질문을 살펴볼 수있을 것이라고 생각한다 : http://stackoverflow.com/questions/42427659/saving-individual-currently-selected-spinner-item-in- 확장형보기 - 자녀? 그렇지 않다고해도 다소 비슷한 주제입니다. –