2016-06-23 5 views
1

Ich habe eine Listenansicht mit mehreren Zeilenlayouts (Radiogruppe, Text bearbeiten, Textansicht), mit Multiple-Choice-Modus. Ich möchte die ausgewählten Daten (vom Benutzer ausgewählte oder getippte Daten) auf einem Absenden-Button abrufen. Android: Werte von Listview mit mehrzeiligem Layout erhalten

Dies ist der Code aus meiner Hauptdatei:

public class GraduatingSurvey extends Fragment { 


    private static final String LOGTAG = "log" ; 
    public String stdcode = "024-15-16079"; 
    Button submit; 
    RadioGroup radioGroup; 
    RadioButton radioButton; 
    EditText comment; 

    ArrayList<GraduatingSurveyModel> graduatingModelList; 
    ListView listView; 
    View view; 

    public GraduatingSurvey() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     view = inflater.inflate(R.layout.fragment_graduating_survey, container, false); 
     submit = (Button) view.findViewById(R.id.btn_graduate_submit); 
     listView = (ListView) view.findViewById(R.id.graduate_list); 
     graduatingModelList = new ArrayList<GraduatingSurveyModel>(); 

     //handle submit form Event. 
     submit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       final int child=listView.getAdapter().getCount(); 
       Log.i("radio", "child: " + child); 
       SparseBooleanArray checked = listView.getCheckedItemPositions(); //Is returning empty 
       Log.i("radio", "sparseArray: " + checked); 
       for(int i=0;i<child;i++) { 
        int type = listView.getAdapter().getItemViewType(i); 
        Log.i("radio", "type: " + type); 
        if(type == 2){ 
         // Want to retrieve data here 

        } 
        if(type == 0) 
        { 

        } 
        if(type == 1){ 

        } 

       } 

      } 
     }); 

     NetAsync(view); 
     return view; 
    } 

Dies ist der Adapter:

public class GraduatingSurveyAdapter extends ArrayAdapter<GraduatingSurveyModel> { 

    private static final int TYPE_ITEM1 = 0; 
    private static final int TYPE_ITEM2 = 1; 
    private static final int TYPE_ITEM3 = 2; 
    int type; 
    ArrayList<GraduatingSurveyModel> ArrayListSurvey; 
    int Resource; 
    Context context; 
    LayoutInflater vi; 
    public GraduatingSurveyAdapter(Context context, int resource, ArrayList<GraduatingSurveyModel> objects) { 
     super(context, resource, objects); 
     ArrayListSurvey = objects; 
     Resource = resource; 
     this.context = context; 
     vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getItemViewType(int position) { 

     if (position == 14){ 
      type = TYPE_ITEM1; 
     } else if (position == 23 || position == 24 || position == 25){ 
      type = TYPE_ITEM2; 
     } 
     else 
     { 
      type= TYPE_ITEM3 ; 
     } 
     return type; 
    } 

    @Override 
    public int getViewTypeCount() { 
     return 3; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     ViewHolder holder; 
     //first Item or row is being created hence ConvertView is NULL 
     if(convertView == null){ 

      if (type == TYPE_ITEM2) { 
       convertView = vi.inflate(R.layout.graduates_survey_comment,null); 
       holder = new ViewHolder(); 
       holder.tv_question = (TextView) convertView.findViewById(R.id.graduate_question); 
       holder.tv_comment = (TextView) convertView.findViewById(R.id.graduate_comment); 
      } 
      else if (type == TYPE_ITEM1) { 
       convertView = vi.inflate(R.layout.graduates_survey_subheader,null); 
       holder = new ViewHolder(); 
       holder.tv_question = (TextView) convertView.findViewById(R.id.graduate_question); 
      } 
      else { 
       //infalte layout of normaltype 

       //Inflating items only once 
       convertView = vi.inflate(Resource,null); 
       holder = new ViewHolder(); 

       holder.tv_question = (TextView) convertView.findViewById(R.id.graduate_question); 
       holder.tv_comment = (TextView) convertView.findViewById(R.id.graduate_comment); 
       holder.rg = (RadioGroup) convertView.findViewById(R.id.graduate_radioGroup); 
       holder.rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { 
        @Override 
        public void onCheckedChanged(RadioGroup group, int checkedId) { 
         /* RadioButton radioButton = (RadioButton) group.findViewById(checkedId); 
         Log.i("radio", "onCheckedChanged: " + radioButton + " " + checkedId); 
         notifyDataSetChanged();*/ 
         Integer pos = (Integer) group.getTag(); 
         GraduatingSurveyModel element = ArrayListSurvey.get(pos); 
         switch (checkedId) { 
          case R.id.graduate_sAgree: 
           element.current = GraduatingSurveyModel.ANSWER_ONE_SELECTED; 
           break; 
          case R.id.graduate_agree: 
           element.current = GraduatingSurveyModel.ANSWER_TWO_SELECTED; 
           break; 
          case R.id.graduate_uncertain: 
           element.current = GraduatingSurveyModel.ANSWER_THREE_SELECTED; 
           break; 
          case R.id.graduate_disagree: 
           element.current = GraduatingSurveyModel.ANSWER_FOUR_SELECTED; 
           break; 
          case R.id.graduate_sDisagree: 
           element.current = GraduatingSurveyModel.ANSWER_FIVE_SELECTED; 
           break; 
          default: 
           element.current = GraduatingSurveyModel.NONE; // Something was 

         } 


        } 
       }); 
      } 

      convertView.setTag(holder); 
     }else{ 
      //reuse code. (Inflate items only once then reuse them.) 
      holder = (ViewHolder) convertView.getTag(); 
     } 

     // get info from ArrayList(that came through JSON), and set it in the View. 

     if (type == TYPE_ITEM1) { 
      holder.tv_question.setText(ArrayListSurvey.get(position).getQuestion()); 
     } 
     else if (type == TYPE_ITEM2) { 
      holder.tv_question.setText(ArrayListSurvey.get(position).getQuestion()); 
     } 
     else{ 
      holder.rg.setTag(new Integer(position)); 
      holder.tv_question.setText(ArrayListSurvey.get(position).getQuestion()); 
      if(ArrayListSurvey.get(position).current != GraduatingSurveyModel.NONE){ 
       RadioButton r = (RadioButton) holder.rg.getChildAt(ArrayListSurvey.get(position).current); 
       r.setChecked(true); 
      }else{ 
       holder.rg.clearCheck(); 
      } 
     } 
     return convertView; 
    } 
    static class ViewHolder{ 
     private TextView tv_question; 
     private TextView tv_comment; 
     private LinearLayout lv_choices; 
     private RadioGroup rg; 

    } 
} 

Das ist mein Modell:

public class GraduatingSurveyModel { 

    public String question; 
    public String comment; 
    public String choices; 
    public String subHeading; 


    public int current = NONE; // hold the answer picked by the user, initial is NONE(see below) 
    public static final int NONE = 1000; // No answer selected 
    public static final int ANSWER_ONE_SELECTED = 0; // first answer selected 
    public static final int ANSWER_TWO_SELECTED = 1; // second answer selected 
    public static final int ANSWER_THREE_SELECTED = 2; // third answer selected 
    public static final int ANSWER_FOUR_SELECTED = 3; // forth answer selected 
    public static final int ANSWER_FIVE_SELECTED = 4; // forth answer selected 


    public GraduatingSurveyModel() { 

    } 

    public String getQuestion() { 
     return question; 
    } 

    public void setQuestion(String question) { 
     this.question = question; 
    } 

    public String getComment() { 
     return comment; 
    } 

    public void setComment(String comment) { 
     this.comment = comment; 
    } 

    public String getChoices() { 
     return choices; 
    } 

    public void setChoices(String choices) { 
     this.choices = choices; 
    } 

    public String getSubHeading() { 
     return subHeading; 
    } 

    public void setSubHeading(String subHeading) { 
     this.subHeading = subHeading; 
    } 
} 

Und dies ist das XML-Layout des Hauptfragments:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="16dp" 
    android:background="@color/dialog_background" 
    android:orientation="vertical" 
    tools:context="iulms.iunc.edu.pk.iqraiulms.GraduatingSurvey" 
    android:id="@+id/main_layout"> 

    <ListView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/graduate_list" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_above="@+id/btn_graduate_submit" 
     /> 
    <Button 
     android:id="@+id/btn_graduate_submit" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="submit" 
     android:layout_alignParentBottom="true" 
     /> 
</RelativeLayout> 

Dies sind die Layouts für die verschiedenen Arten von Reihen in Listenansicht

Row Typ 1:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/dialog_background" 
    android:orientation="vertical" 
    android:paddingBottom="16dp" 
    android:paddingTop="16dp"> 

    <TextView 
     android:id="@+id/graduate_question" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="15dp" 
     android:text="1. Here comes questions?" 
     android:textSize="13dp" /> 

    <!-- <EditText 
     android:id="@+id/graduate_comment" 
     style="@style/GraduateTextBox" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:background="@drawable/textbox" 
     android:ems="10" 
     android:hint="Comment" 
     android:inputType="textMultiLine" 
     android:lines="3" />--> 

    <LinearLayout 
     android:id="@+id/graduate_choices" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <RadioGroup 
      android:id="@+id/graduate_radioGroup" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 

      <RadioButton 
       android:id="@+id/graduate_sAgree" 
       style="@style/GraduateRadioButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/checkbox_selector" 
       android:button="@android:color/transparent" 
       android:checked="false" 
       android:text="Strongly Agree" /> 

      <RadioButton 
       android:id="@+id/graduate_agree" 
       style="@style/GraduateRadioButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/checkbox_selector" 
       android:button="@android:color/transparent" 
       android:checked="false" 
       android:text="Agree" /> 

      <RadioButton 
       android:id="@+id/graduate_uncertain" 
       style="@style/GraduateRadioButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/checkbox_selector" 
       android:button="@android:color/transparent" 
       android:checked="false" 
       android:text="Uncertain" 
       /> 

      <RadioButton 
       android:id="@+id/graduate_disagree" 
       style="@style/GraduateRadioButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/checkbox_selector" 
       android:button="@android:color/transparent" 
       android:checked="false" 
       android:text="Disagree" /> 

      <RadioButton 
       android:id="@+id/graduate_sDisagree" 
       style="@style/GraduateRadioButton" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:background="@drawable/checkbox_selector" 
       android:button="@android:color/transparent" 
       android:checked="false" 
       android:text="Strongly Disagree" /> 
     </RadioGroup> 
    </LinearLayout> 
</LinearLayout> 

Zeilentyp 2

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/dialog_background" 
    android:orientation="vertical" 
    android:paddingBottom="16dp" 
    android:paddingTop="16dp"> 

    <TextView 
     android:id="@+id/graduate_question" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="15dp" 
     android:text="1. Here comes questions?" 
     android:textSize="13dp" /> 

    <EditText 
     android:id="@+id/graduate_comment" 
     style="@style/GraduateTextBox" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:background="@drawable/textbox" 
     android:ems="10" 
     android:hint="Comment" 
     android:inputType="textMultiLine" 
     android:lines="3" /> 
    </LinearLayout> 

Row Typ 3:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@color/dialog_background" 
    android:orientation="vertical" 
    android:paddingBottom="16dp" 
    android:paddingTop="16dp"> 

    <TextView 
     android:id="@+id/graduate_question" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="15dp" 
     android:text="1. Here comes questions?" 
     android:textSize="15dp" 
     android:textColor="@color/primary_dark"/> 
</LinearLayout> 

Wie kann ich abrufen die Daten im Hauptfragment eingereicht?

Dank

Antwort

0

Für diese Sie eine benutzerdefinierte Klasse mit Zeilenwerten wie, fügen Sie, dass

Arraylist<CustomClass> mnewList = new ArrayList(); 
Class CustomClass 
{ 
    private String edValues, 
    private int rowId, 
} 

usw.

Dann Implementieren auf Änderung

für Radiobutton Hörer erstellen/entfernen aktuell ausgewählte Elemente zu dieser benutzerdefinierten Liste.

+0

Danke. Könnten Sie bitte mehr erklären? Ich bin neu in der Android-Entwicklung. Ich mache eine Umfrage, in der verschiedene Fragen gestellt werden. Einige dieser Fragen werden durch Auswählen von Optionsfeldern beantwortet, andere werden durch Kommentare beantwortet. was ich erstellt habe. Nun, was ich will ist, wenn der Benutzer die Schaltfläche Senden drückt, möchte ich alle aktivierten Radiobuttons und Kommentare sammeln und sie an den Server senden. Wie kann ich es tun? ON senden klicken. ListView.getCheckedItemPositions() gibt ein leeres Array zurück. –

Verwandte Themen