2016-03-14 66 views
0

我有一個recyclerview,它在每一行都有一個edittext。
行數在50到60之間。我從服務器獲取行數。
我如何獲得每個edittext的文本?
這個動作可以給我異常錯誤嗎?從recyclerview的每一行獲取數據

對不起我的英語不好。

回答

1

您可以在適配器和視圖持有人實現這個邏輯:

class YourAdapter extend RecyclerView.Adapter<YourAdapter.ViewHolder> { 
    List<String> yourEditTextContents = ...; 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
      holder.yourEditText.setTag(position); 
      holder.yourEditText.setText(yourEditTextContents.get(position)); 
    } 

    class ViewHolder extend RecyclerView.ViewHolder { 
      EditText yourEditText; 
      public ViewHolder(View root){ 
       ... 
       yourEditText = root.findViewById(); 
       yourEditText.addTextChangedListener(new TextWatcher() { 
        @Override 
        public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

        } 

        @Override 
        public void onTextChanged(CharSequence s, int start, int before, int count) { 

        } 

        @Override 
        public void afterTextChanged(Editable s) { 
         int position = (int)yourEditText.getTag(); 
         yourEditTextContents.set(position, s.toString()); 
        } 
       }); 
      } 
    } 
} 

之後,你可以編輯文本的文本只需使用:

yourEditTextContents.get(position) 
1

我該如何獲得每個edittext的文本?

您無法獲得全部50個文字。您只能獲取當前屏幕上的文字的值。當您使用RecyclerView時,您只有EditText對象在屏幕上可見。當您滾動列表時,EditText被重複使用,即使您有50行,也不會有50 EditText對象。

如何將數據加載到那些EditText s?您已將所有數據加載到EditText之前。如果您想在用戶鍵入內容後獲取數據,請使用OnTextChangedListener獲取已更改的文本,然後更新模型。

這個動作可以給我異常錯誤嗎?

再次,沒有50 EditText s,所以這是不可能的。如果您確實需要從視圖中獲取值,則只能從視圖中獲取值。這不會給你任何例外或錯誤。