2016-06-09 4 views
0

Recyclerview имеет 4 позиций i.e; textView1, textView2, EditText1 и Checkbox1. Recyclerview имеет 24 строки. EditText невидим на начальном этапе, тогда он будет виден только тогда, когда соответствующий флажок установлен пользователем. EditText принимает только числа.Как получить значение элемента Recyclerview в Android?

Приложение работает нормально до сих пор это много.

Теперь мне нужно получить значение всех EditTexts и отобразить его на другом Textview, который не входит в часть Recyclerview?

Recyclerview Screenshot- Output Link

примеры кода.

ExamFragment.java

public class ExamFragment extends Fragment { 


    RecyclerView recyclerView; 
    ExamFragmentAdapter adapter; 
    ArrayList<tblChapters> datalistChapters = new ArrayList<>(); 
    TextView txtQcount,txtQCounttotal; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View v= inflater.inflate(R.layout.fragment_exam, container, false); 

     txtQCounttotal=(TextView) v.findViewById(R.id.txtQCounttotal); 
     txtQcount=(TextView) v.findViewById(R.id.txtQCount); 
     recyclerView=(RecyclerView)v.findViewById(R.id.recycler_view); 
     conn = new ConnectionClass(); //connection initialisation 
     datalistChapters = conn.getChaptersAndCount(modeid, subjectid); 
     adapter = new ExamFragmentAdapter(datalistChapters, getActivity()); 
     RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getActivity()); 
     recyclerView.setLayoutManager(mLayoutManager); 
     recyclerView.setItemAnimator(new DefaultItemAnimator()); 
     recyclerView.setAdapter(adapter); 
     return v; 
} 

} 

ExamFragmentAdapter.java

public class ExamFragmentAdapter extends RecyclerView.Adapter<ExamFragmentAdapter.MyViewHolder> { 

    private LayoutInflater inflater; 
    MyViewHolder holder; 
    Context mContext; 


    ArrayList<tblChapters> chapterList=new ArrayList<>(); 
    public ExamFragmentAdapter(ArrayList<tblChapters> chapterList, Context context) { 
     inflater = LayoutInflater.from(context); 
     this.chapterList = chapterList; 
     mContext=context; 

    } 
    @Override 
    public ExamFragmentAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.chapter_list_row, parent, false); 
     holder = new MyViewHolder(view, new MyCustomEditTextListener()); 
     return holder; 

    } 

    @Override 
    public void onBindViewHolder(final ExamFragmentAdapter.MyViewHolder holder, final int position) { 
     holder.title.setTextColor(Color.BLACK); 
     holder.slno.setTextColor(Color.BLACK); 
     holder.noOfQst.setTextColor(Color.BLACK); 
     holder.noOfQst.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); 
     holder.noOfQst.setGravity(Gravity.CENTER); 
     holder.title.setText(chapterList.get(position).getTitle()); // Setting Chapter title 
     holder.slno.setText(String.valueOf(position + 1)+"."); //Setting sl no 

     holder._myCustomEditTextListener.updatePosition(position); 

     holder.noOfQst.setText(chapterList.get(position).getNoofQstns()); //Setting no of qstn 

     if (chapterList.get(position).isVisibled()) { 
      holder.noOfQst.setVisibility(View.VISIBLE); 
     } else { 
      holder.noOfQst.setVisibility(View.INVISIBLE); 
     } 

     //in some cases, it will prevent unwanted situations 
     holder.cbox.setOnCheckedChangeListener(null); 

     //if true, your checkbox will be selected, else unselected 
     holder.cbox.setChecked(chapterList.get(position).isSelected()); 

     holder.cbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       //set your object's last status 
       chapterList.get(position).setSelected(isChecked); 
       chapterList.get(position).setVisibled(isChecked); 


       //if checkbox checked display EditText(No of qstns), else hide it. 
       if (holder.cbox.isChecked()) { 
        holder.noOfQst.setVisibility(View.VISIBLE); 
        holder.noOfQst.requestFocus(); 
        holder.noOfQst.setText("10"); 
        chapterList.get(position).setNoofQstns(holder.noOfQst.getText().toString()); 
        /* txtQcount.setText("0"); 
        if (txtQcount.getText().toString().equals("")) { 
         txtQcount.setText("0"); 
        } 
        txtQcount.setText(Integer.valueOf(txtQcount.getText().toString())+Integer.parseInt(holder.noOfQst.getText().toString()));*/ 
       } 
       else { 
        holder.noOfQst.setVisibility(View.INVISIBLE); 
        holder.noOfQst.setText(""); //remove entered value when uncheck 
        chapterList.get(position).setNoofQstns(""); 
       } 
      } 
     }); 

    } 

    // we make TextWatcher to be aware of the position it currently works with 
    // this way, once a new item is attached in onBindViewHolder, it will 
    // update current position MyCustomEditTextListener, reference to which is kept by ViewHolder 
    private class MyCustomEditTextListener implements TextWatcher 

    { 
     private int position; 
     private String oldval; 


     public void updatePosition(int position) { 
      this.position = position; 
     } 

     @Override 
     public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
      // no op 
     } 

     @Override 
     public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 

      chapterList.get(position).setNoofQstns(charSequence.toString()); 
      int j = i; 
      j = i2; 
      j = i3; 
     } 

     @Override 
     public void afterTextChanged(Editable editable) { 


     } 
    } 
    @Override 
    public int getItemCount() { 
     return chapterList.size(); 
    } 

    public class MyViewHolder extends RecyclerView.ViewHolder { 
     TextView title; 
     CheckBox cbox; 
     TextView slno; 
     EditText noOfQst; 
     public MyCustomEditTextListener _myCustomEditTextListener; 
     public MyViewHolder(View itemView,MyCustomEditTextListener myCustomEditTextListener) { 
      super(itemView); 

      title = (TextView) itemView.findViewById(R.id.txtTitle); 
      cbox = (CheckBox) itemView.findViewById(R.id.cboxChapter); 
      slno = (TextView) itemView.findViewById(R.id.txtRowSlno); 
      noOfQst = (EditText) itemView.findViewById(R.id.etNoOfQstns); 

      this._myCustomEditTextListener = myCustomEditTextListener; 

      try { 
       if (noOfQst.getVisibility() == View.VISIBLE) { 
        holder.noOfQst.setVisibility(View.INVISIBLE); 
        //adding textchange listener to no of qstn(EditText) 
        noOfQst.addTextChangedListener(myCustomEditTextListener); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

     } 
    } 
+0

Реализовать изменения текста слушателю и вызвать метод с позицией и текстом. –

+0

* Теперь мне нужно получить значение всех EditTexts * почему? ... если я правильно понимаю ваш код, у вас уже есть значения в списке подкласса класса модели ... итерация главыList и сбор данных – Selvin

+0

@selvin ..... Вы правы. У меня есть ArrayList (chapterList), который содержит все данные в классе адаптера. Но мне нужны эти данные в моем классе фрагментов. Как получить значение editText из ExamFragment.java? потому что мне нужно отобразить это значение в другом текстовом представлении, которое не является частью класса recyclerview или адаптера. – Sam

ответ

0

Вы можете зарегистрировать AdapterDataObserver для адаптера просмотра утилизатор. Для каждого элемента адаптера, когда он обновлен (пользователь обновляет EditText), адаптер может вызывать notifyItemChanged(int position, Object payload). наблюдатель получит полезную нагрузку в своем обратном вызове onItemRangeChanged (int positionStart, int itemCount, Object payload), вы можете передать все, что хотите, в объект полезной нагрузки, чтобы вы накапливали значения всех EditTexts.

Вы также можете отменить регистрацию наблюдателя в вашей деятельности/Фрагмент OnStop по calling unregisterAdapterDataObserver

+0

Большое вам спасибо. Теперь я могу легко получить всю ценность editText с моей страницы фрагмента. – Sam

+0

Добро пожаловать, я рад, что это помогло. –