2016-05-07 16 views
0

私はrecyclerviewを持っています。私は手動でrecyclerviewに項目(行)を追加しています。各行にはテキストビューがあり、編集テキストここで値を入力する必要があります。 recyclerviewに項目を追加した後、私はテキストビュー名(ショッピングカートのような)で入力値を取得する必要があります。私はテキストビューの値を取得する方法を知っています。問題は編集テキスト値を取得しています。最初の5つの編集テキストビューの値しか取得できません。他の人のために、それは私に5番目の位置の編集テキスト値を与えます。私はJson形式を使用してサーバーにデータを送信しています。私はjsonを構築して、それにアイテムを追加しています。だから私はそれにテキスト値を編集を追加する必要があります。 スクロール時に価値交換の問題はありません。私が必要とするのは、すべての編集テキスト値を取得することだけです。Recyclerviewの値の取得テキストの編集

例メインクラス

private class SendItemAsync extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
     } 

     @Override 
     protected Void doInBackground(Void... arg0) { 

      //Create JSON string start 
      json_string = "{\"sending_items\":["; 

      for (int i = 0; i < myRecyclerViewAdapter.getItemCount(); i++) { 

       //Repeat and loop this until all objects are added (and add try+catch) 
       try { 
        JSONObject obj_new = new JSONObject(); 
        obj_new.put("order_no", orderIdForItemTable); 
        obj_new.put("items", myRecyclerViewAdapter.getItemName(i).toString()); 
        obj_new.put("items_no", myRecyclerViewAdapter.getItemPCode(i).toString()); 
        obj_new.put("plant", myRecyclerViewAdapter.getItemPlant(i).toString()); 
        obj_new.put("quantity", getNumPicNumber(i)); 
        json_string = json_string + obj_new.toString() + ","; 

       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

      //Close JSON string 
      json_string = json_string.substring(0, json_string.length() - 1); 
      json_string += "]}"; 

      HttpParams httpParams = new BasicHttpParams(); 
      HttpConnectionParams.setConnectionTimeout(httpParams, 3500); 
      HttpConnectionParams.setSoTimeout(httpParams, 1000); 
      HttpClient client = new DefaultHttpClient(httpParams); 

      String url = AppConfig.URL_ITEMS_SEND; 

      HttpPost request = new HttpPost(url); 
      try { 
       request.setEntity(new ByteArrayEntity(json_string.getBytes("UTF8"))); 
      } catch (UnsupportedEncodingException e) { 
       e.printStackTrace(); 
      } 
      request.setHeader("json", json_string); 
      request.setHeader("Accept", "application/json"); 
      request.setHeader("Content-Type", "application/json"); 
      Log.i("", "excuting request"); 
      HttpResponse response = null; 
      try { 
       response = client.execute(request); 
       Log.d("HTTP Response", response.getStatusLine().toString()); 
       try { 
        String responseBody = EntityUtils.toString(response.getEntity()); 
        Log.d("Server Response", responseBody); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } catch (IOException e) { 
       e.printStackTrace(); 

      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 
      finish(); 
      Bundle basket = new Bundle(); 
      basket.putString("dealerName", dealerName); 
      basket.putString("orderNo", newOrderId); 
      basket.putString("jsonString", json_string); 
      Intent intent = new Intent(SelectItem.this, ItemCart.class); 
      intent.putExtras(basket); 
      startActivity(intent); 
      finish(); 
      //Toast.makeText(getApplicationContext(), json_string, Toast.LENGTH_LONG).show(); 
     } 
    } 

    private String getNumPicNumber(int i) { 
     if (myRecyclerView.findViewHolderForLayoutPosition(i) instanceof SelectItemAdapter.ItemHolder) { 
      SelectItemAdapter.ItemHolder childHolder = (SelectItemAdapter.ItemHolder) myRecyclerView.findViewHolderForLayoutPosition(i); 
      numberPickerNumber = childHolder.getQtyNumber(); 
     } 
     return numberPickerNumber; 
    } 

マイアダプタクラス

public class SelectItemAdapter extends RecyclerView.Adapter<SelectItemAdapter.ItemHolder> { 

    private List<String> itemsName, itemsQty, itemsPCode, itemPlant; 
    private OnItemClickListener onItemClickListener; 
    private LayoutInflater layoutInflater; 
    private RecyclerView myRecyclerview; 

    public SelectItemAdapter(Context context) { 
     layoutInflater = LayoutInflater.from(context); 
     itemsName = new ArrayList<String>(); 
     itemsQty = new ArrayList<String>(); 
     itemsPCode = new ArrayList<String>(); 
     itemPlant = new ArrayList<String>(); 
    } 

    @Override 
    public SelectItemAdapter.ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = layoutInflater.inflate(R.layout.custom_row_selected_item, parent, false); 
     return new ItemHolder(itemView, this); 
    } 

    @Override 
    public void onBindViewHolder(SelectItemAdapter.ItemHolder holder, int position) { 
     holder.setItemName(itemsName.get(position)); 
     holder.setItemQty(itemsQty.get(position)); 
     holder.setItemPCode(itemsPCode.get(position)); 
     holder.setItemPlant(itemPlant.get(position)); 

    } 

    @Override 
    public int getItemViewType(int position) { 
     return position; 
    } 


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

    public Object getItemName(int position) { 
     return itemsName.get(position); 
    } 

    public Object getItemPCode(int position) { 
     return itemsPCode.get(position); 
    } 

    public Object getItemPlant(int position) { 
     return itemPlant.get(position); 
    } 

    public void setOnItemClickListener(OnItemClickListener listener) { 
     onItemClickListener = listener; 
    } 

    public OnItemClickListener getOnItemClickListener() { 
     return onItemClickListener; 
    } 


    public interface OnItemClickListener { 
     public void onItemClick(ItemHolder item, int position); 
    } 

    public void add(int location, String iName, String iQty, String iPCode, String iPlant) { 
     itemsName.add(location, iName); 
     itemsQty.add(location, iQty); 
     itemsPCode.add(location, iPCode); 
     itemPlant.add(location, iPlant); 
     notifyItemInserted(location); 
    } 

    public void remove(int location) { 
     if (location >= itemsName.size()) 
      return; 

     itemsName.remove(location); 
     notifyItemRemoved(location); 
    } 

    public static class ItemHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

     private SelectItemAdapter parent; 
     TextView textItemName, txtPCode, txtAvailableQty, txtTempQty, txtPlant; 
     Button bRemove; 
     EditText numPicker; 

     public ItemHolder(View itemView, SelectItemAdapter parent) { 
      super(itemView); 
      this.parent = parent; 
      textItemName = (TextView) itemView.findViewById(R.id.txtProductName); 
      txtAvailableQty = (TextView) itemView.findViewById(R.id.txtAvailbleQty); 
      txtPCode = (TextView) itemView.findViewById(R.id.txtPCode); 
      txtPlant = (TextView) itemView.findViewById(R.id.txtPlant); 
      bRemove = (Button) itemView.findViewById(R.id.bRemove); 
      numPicker = (EditText) itemView.findViewById(R.id.numberPicker); 

      bRemove.setOnClickListener(this); 
     } 


     public void setItemName(CharSequence name) { 
      textItemName.setText(name); 
     } 

     public void setItemQty(CharSequence name) { 
      txtAvailableQty.setText(name); 
     } 

     public void setItemPCode(CharSequence name) { 
      txtPCode.setText(name); 
     } 

     public void setItemPlant(CharSequence name) { 
      txtPlant.setText(name); 
     } 

     public String getQtyNumber() { 
      return numPicker.getText().toString(); 
     } 

     public CharSequence getItemName() { 
      return textItemName.getText(); 
     } 


     public CharSequence getItemPCode() { 
      return txtPCode.getText(); 
     } 

     @Override 
     public void onClick(View v) { 
      final OnItemClickListener listener = parent.getOnItemClickListener(); 
      if (listener != null) { 
       listener.onItemClick(this, getPosition()); 
      } 
     } 
    } 

} 

これまでのところありませんグー

Quantity : 1 
Quantity : 2 
Quantity : 3 
Quantity : 4 
Quantity : 5 
Quantity : 5 
Quantity : 5 
Quantity : 5 
Quantity : 5 
Quantity : 5 

d。私はここで立ち往生している。

+0

に渡すことができる量

SelectItemAdapter selectItemAdapter = new SelectItemAdapter(); int quantities [] = selectItemAdapter.getQuantities(); 

を得るためにあなたのgetterメソッドを呼び出しますこれをチェックしてくださいhttp://www.mzan.com/article/35991835-get-data-from-each-row-of-recyclerview.shtml –

+0

もちろん、まだ私は新生です。私の質問は、私は手動でrecyclerviewにアイテムを追加しています。ショッピングカートのようです。 1つの行(項目)は、項目を追加した後に入力することができる編集テキストフィールドを持っています(10から20)。これらのデータをサーバに送信しています。私の問題は、私は5行目の後にテキストの値を編集することはできません。 5行目の後、5行目のedittextに同じ値が与えられました。他の編集テキスト値を取得する方法は?終了まで6日。 –

+0

plzあなたの返信のためにthys –

答えて

0

これは私があなたがすべきだと思うものです。

RecyclerView Adapterクラスでは、グローバル配列変数quantityを宣言します。 コンストラクタに渡しているアイテムのサイズでコンストラクタでインスタンス化します。

次に、オンバインドビューをオンにします。あなたのナンバー・ピッカーにtextchangelistenerを追加し、テキストが変更された後に、テキストをその位置に取得し、それを数量グローバル変数に格納します。

あなたは これらの量は、あなたが特殊なアダプタインスタンスを作成しているクラスでは

public class SelectItemAdapter extends RecyclerView.Adapter<SelectItemAdapter.ItemsHolder>{ 

    private int quantities []; 

    public SelectItemAdapter() { 
     this.quantities = new int[getItemCount()]; 
    } 


    @Override 
    public ItemsHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     return null; 
    } 

    @Override 
    public void onBindViewHolder(final ItemsHolder holder, int position) { 
     holder.numPicker.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) { 
       quantities[holder.getAdapterPosition()] = 
         Integer.parseInt(holder.numPicker.getText().toString()); 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 

      } 
     }); 
    } 

    @Override 
    public int getItemCount() { 
     return 0; 
    } 

    class ItemsHolder extends RecyclerView.ViewHolder { 

     private SelectItemAdapter parent; 
     TextView textItemName, txtPCode, txtAvailableQty, txtTempQty, txtPlant; 
     Button bRemove; 
     EditText numPicker; 

     ItemsHolder(final View view) { 
      super(view); 
      textItemName = (TextView) itemView.findViewById(R.id.txtProductName); 
      txtAvailableQty = (TextView) itemView.findViewById(R.id.txtAvailbleQty); 
      txtPCode = (TextView) itemView.findViewById(R.id.txtPCode); 
      txtPlant = (TextView) itemView.findViewById(R.id.txtPlant); 
      bRemove = (Button) itemView.findViewById(R.id.bRemove); 
      numPicker = (EditText) itemView.findViewById(R.id.numberPicker); 

     } 
    } 

    public int [] getQuantities(){ 
     return this.quantities; 
    } 
} 

を処理するためAsyncTaskに渡されるすべてのquantiesを返すために、アダプタインスタンス上で呼び出しますゲッターヘルパーメソッドを作成します。量は、あなたのAsyncTaskクラス

+0

感謝の仲間を助けてください。私は方法を見つけ出す。 –

関連する問題