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

(소스추가했습니다)startActivityForResult 값 에 대해서.. [closed]

+1 추천

startActivityForResult 값 바뀌는걸하고있습니다

 
listView마다 버튼을 눌러 startActivityForResult 를 가지구와서  edit Text로 가격을 입력하면
 
변경된 값이 적용이됩니다..'
 
근데...!
 
세번째 버튼을 눌렀는데도 첫번째리스트가 변경이되고
 
몇번째 버튼을 눌러 가격을 수정해도 첫번째만변경되네요..
 
미치겟습니다
 
그리고 5000원 을 값변경을통해 3000원이라 했다면
또 리스트 추가를하면 기존의 5000원으로 바뀝니다..
어찌해야하나요..
 
 
--------------------------
피자          5000    버튼
--------------------------
귤             10000   버튼
--------------------------
환타          500      버튼
--------------------------
치킨          15000  버튼
 
 
버튼으로 값변경해서
 
--------------------------
피자          3000    버튼
--------------------------
귤             10000   버튼
--------------------------
환타          500      버튼
--------------------------
치킨          15000  버튼
 
이 된다해도
 
아래 리스트를 클릭해 또 리스트 뷰에 추가하면 다시 5000원이 되요..
 
소스추가
// main.java

if(type.equals(mAdapter.TYPE_S)){
    if(isEditable){
        if(orderType.equals(mAdapter.ORDERTYPE_SERVICE)){
     addItems.get(addItemsIndex).setOrderType("DEFAULT");
  setOrderListView();
}else{
      addItems.get(addItemsIndex).setOrderType("SERVICE");
      // 인텐트 객체를 생성한다.
                  Intent intent = new Intent(this, Calculator.class); // edit 팝업창 불러오기

                  // 결과값을 받기 위한 Sub Activity 호출
                  startActivityForResult(intent, REQUEST_CODE);
                  setOrderListView();
              }
          }
      }

}

 @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       TextView txt_pPrice = (TextView) findViewById(R.id.tv_orderlist_item_5);

             if(requestCode == REQUEST_CODE) // Sub Activity 호출시 사용된 요청 코드
             {
                 if(resultCode == RESULT_OK) // Sub Activity의 결과 코드
                 {
                     // 받아온 이름과 전화번호를 액티비티에 표시한다.
              
                  txt_pPrice.setText(data.getStringExtra("data_digit"));
                 }
             }
         }

 

 

// calculator.java 팝업창인데 엔터누를시 소스입니다

 btnEnter = (LinearLayout)findViewById(R.id.btn_calculator_confirm);

 btnEnter.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            EditText edtInput = (EditText) findViewById(R.id.edt_calculator_input);

            Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출한다.

            // 인텐트에 추가 정보를 넣은 후, 다시 인텐트를 반환한다.
        
            intent.putExtra("data_digit", edtInput.getText().toString());
            setResult(RESULT_OK, intent);

            finish(); // 액티비티 종료
        }
    });

}

질문을 종료한 이유: 답변해주신분들 너무감사드립니다. 제가 리스트한줄한줄 처리했어야햇는데 그러지못했었습니다..감사요 뿌잉뿌잉
익명사용자 님이 2014년 1월 7일 질문
2014년 1월 8일 closed
btnEnter 이버튼이 리스트뷰 버튼인가요?
네네 그렇습니다 리스트뷰 보시면 한줄한줄마다 버튼이있습니다!
listview를 adapter없이 activity에서 구현한건가요?
아아 어댑터는 따로잇습니다
listviewadapter는 그냥 값변경해주겟단 버튼이있고요
main은 저 소스들이있고요 어댑터에있는 버튼 main에서 다루고요..
calculator 에서는 edit Text 팝업창입니다..

6개의 답변

+1 추천
첫 번째 리스트의 값만 변경된다면 코드가 첫 번째 리스트의 값만 변경하도록 작성되었기 때문일 것입니다.

그리고 피자의 가격이 다시 원래의 가격으로 돌아가는 것은 원래의 액티비티로 돌아가면서 listView를 새로 생성하기 때문으로 추측됩니다.

정확한 내용은 코드를 봐야 알 것 같네요. 가능하시면 코드를 본문에 삽입해보세요.
방귀과장 (18,940 포인트) 님이 2014년 1월 7일 답변
봐주세요 소스추가햇습니다..
빠진게있나요?
+1 추천
제생각엔 btnEnter 이부분이 adapter쪽으로 들어가야 제대로 작동할것 같은데요
mamongs (4,050 포인트) 님이 2014년 1월 7일 답변
헉 그럼 ...calculator 의 팝업창과 adapter가 합쳐져야하나요..?
띠로리 너무어렵네요...
+1 추천
소스를 전부다 볼수없어서.. 머라 말씀드리기가 애매하네요

제생각엔..

adapter 쪽에 getview 안에

 

리스트가 하나씩 만들어질때마다

btnEnter = (LinearLayout)findViewById(R.id.btn_calculator_confirm);

btnEnter.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {

EditText edtInput = (EditText) findViewById(R.id.edt_calculator_input);

Intent intent = getIntent(); // 이 액티비티를 시작하게 한 인텐트를 호출한다.

// 인텐트에 추가 정보를 넣은 후, 다시 인텐트를 반환한다.

intent.putExtra("data_digit", edtInput.getText().toString());
 

setResult(RESULT_OK, intent);}

 

 

 

Activity parent = (Activity) mContext;
       parent.setResult(resultCode);});

 

머이런식으로 정확한건아닙니다~ 추측~~~일뿐~
mamongs (4,050 포인트) 님이 2014년 1월 7일 답변
답변 정말감사합니다ㅠㅠ
맞는거같은데 어렵네요잉
+1 추천

startActivityForResult 호출에서의 핵심은 onActivityResult() 입니다. 

올리신 코드를 보면 다음과 같이 textview 를 지정해놓고 해당 텍스트만 변경하게 구현되어 있습니다.

TextView txt_pPrice = (TextView) findViewById(R.id.tv_orderlist_item_5);  txt_pPrice.setText(data.getStringExtra("data_digit"));

클릭한 리스트행의 텍스트뷰 값을 가져와서 setText 되도록 이 부분이 수정되어야 합니다. 

Gradler (109,780 포인트) 님이 2014년 1월 7일 답변
헉...정말 감사합니다..
음 근데 네......
무슨말인진 알겠지만 음 맨마지막 말이 이해가잘안가네용..
지금 질문하신 현상으로 유추해보면 R.id_tv_orderlist_item_5 이 객체는
첫번째 행에 해당하는 textView 값입니다.
근데 세번째 행에 있는 버튼을 눌러서 해도 돌아오면 첫번째 행에 해당하는 textView가 바껴있더라 이거잖아요?
그럼 세번째행에 있는 버튼을 눌렀으면 돌아왔을때 세번째 행에 있는 text의 id값을 가져다가 textView를 초기화 시켜줘야 하는데 지금 무조건 첫번째 행의 textView id만 가지고 오고 있다 이말입니다. 이해가 되셨을지 모르겠군요 말로하면 쉬운데 글로 적으니 영 답답하네요;;
맞아요!
R.id_tv_orderlist_item_5 첫번째 줄만 바뀌고있어요
먼말인지 이해가갔어요!
근데 세번째 행의 R.id_tv_orderlist_item_5를 바꾸려면 어떻게 하는진 모르겠어요..
이해 문제가 뭔지아셨으니, 나머지는 스스로 방법을 찾아 보시기 바랍니다.
그럼..
감사감사합니다ㅠㅠ~~~~~
0 추천
이것만봐선 알수가 없네요..

무슨말씀하는지 잘모르겟구요..

클릭한 listview이벤트가 내가 클릭한게 맞는지부터 확인해보세요
mamongs (4,050 포인트) 님이 2014년 1월 7일 답변
0 추천
StartActivityForResult 아래에 setOrderListView 메소드가 있네요. 혹시 이것이 영향을 미치지 않나요?
방귀과장 (18,940 포인트) 님이 2014년 1월 7일 답변
뉴뉴아닙니다 두개다 지웠는데도 그냥그러네요..
...