마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

recycler view 에서 edittext로 가격을 정한뒤 그 가격의 총합을 프래그먼트에 나타내려합니다.

0 추천
리사이클러 뷰 어댑터에서 에서 edittext 값을 전부 더해서 프래그먼트에 텍스트뷰에 그값을 넣으려고하는데

edittext값을 전부 더하는 방법과 그 값을 프래그먼트에서 받을 수 있는 방법을 알고싶습니다.

버튼을 눌러서 값을 가져오는것 말고 뷰홀더의 edittext에 textwatcher를 이용해서 하려는데 도무지 안되네요 ㅠㅠ

도와주시면 감사하겟습니다
Edge_JH (200 포인트) 님이 2016년 9월 10일 질문
이런 질문은 님이 시도해보신 코드를 보여주셔야 님이 의도하는 바를 이해하기 쉽습니다. 그런 힌트를 안주신 관계로 제 나름대로 상상해서 댓글을 다는 것임을 이해해 주세요.

먼저 전체 아이템을 가지고 있는 ArrayList같은 collection 클래스를 만드세요. 이 클래스는 UI에 종속되지 않는 데이터만을 처리하는 클래스가 됩니다. 아래와 같은 형태가 될 것 같네요.
//Single item
public class item {
     private double price;
     private double sum;
     public double getPrice(){...}
     public void setPrice(double value){...}
}

public class ItemsModel {
    private ArrayList<Item> items;

    public ArrayList<Item> getItems(){...}
    public double getSum(){...}

    public void addItem(Item item){
         items.add(item);
         doSum();
    }

   public void updateItem(Item item) {
         //code to update item
         doSum();
   }

  public void deleteItem(Item item) {
      //Code to delete item
      doSum();
  }

  public void doSum() {
      sum = 0;
      for (Item item in items) {
           sum += item.getPrice();
      }
  }
}

public interface summaryChangedListener {
      public void onSummary(double sum);
}

//Your RecylerView adapter
private ItemsModel itemsModel;
private summaryChangedListener listener;

public void setItemsModel(ItemsModel itemsModel) {
     this.itemsModel = itemsModel;
}

public void setSummaryChangedListener(summaryChangedListener listener) {
     this.listener = listener;
}

editBox.addTextChangedListener(new TextWatcher() {
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                 Item item = itemsModel.getItem(position);
                 item.setPrice(Double.parseDouble(s.toString());
                 itemsModel.updateItem(item);
                 if (listener != null)
                     listener.onSummary(itemsModel.getSum())
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

                // TODO Auto-generated method stub
            }

            @Override
            public void afterTextChanged(Editable s) {

                // TODO Auto-generated method stub
            }


이제 Adapter 를 생성하는 쪽에서 Adapter를 생성할 때에 ItemsModel과 summaryChangedListener를 inject해주시면 될 것 같습니다.

fragment와 activity 구조를 안보여 주셨기 때문에 나머지는 뭐라 말씀드리기 힘든데,
fragment에서 summaryChangedListener를 implement하도록 해서 adapter에 inject할 수 있다면 자동으로 콜백 호출을 받게 될겁니다.

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...