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

ListView & Adapter로 EditText를 다중으로 생성하는데요

0 추천
ListView와 Adatper을 이용해서 EditText를 다중으로 생성하려고 하는데요..

폭풍 구글링과 stackoverflow를 다 뒤져봐도 내용을 찾지 못해 이렇게 질문드립니다 ㅠㅠ

생성하는데까진 어떻게 할 수 있겠는데요 코드 실행 후 EditText에 값을 입력하고 키보드를 내리거나

화면 스크롤을 이동시키면 EditText값이 다 초기화되거나 몇개가 사라지거나 합니다..

며칠 째 이 문제 때문에 애먹고있는데요 ㅠㅠ 참고할만한 예제도 없고 졸업프로젝트로 앱 개발중이라

필요한 정보만 공부하고 적용시키는 수준이라 전체적인 구조를 잡기가 어렵네요..

혹시 간단하게 나마 EditText를 생성하고 버튼을 누르면 입력된 값을 가져오는 예제에대한 힌트나 소스좀 부탁드릴 수 있을까요..?
higuru (500 포인트) 님이 2015년 3월 18일 질문

1개의 답변

0 추천
 
채택된 답변
리스트 한줄 출력에 필요한 model class를 생성하시고 String 변수에 edittext의 text값이 수정될때마다 동기화시키세요.adapter의 getView에서 모델객체의 값을 editText에 넣어 주시면 됩니다.

아래 링크 참고하세요.

http://tjandroid.blogspot.kr/2013/05/edittext-in-listview.html

리스트뷰의 각 줄에 버턴을 두고 클릭시 해당 줄안의 EditTextView의 값을 Activity에서 가져다 쓰시고 싶으시면 interface하나 만들어서 콜백하면 됩니다.
이드로이드 (22,930 포인트) 님이 2015년 3월 18일 답변
higuru님이 2015년 3월 18일 채택됨
답변 너무나 감사드립니다!!
public void getEditTextValue(View view) {
        ArrayList<String> tmp = myAdapter.getEtValue();
        for(int i=0;i<tmp.size();i++){
            Log.d("zz",tmp.get(i).toString());
        }
    }

private class MyAdapter extends ArrayAdapter<Item> {

        private final static int resId = R.layout.list_item;
        private Context context;
        List<Item> list;
        ArrayList<String> etValue=new ArrayList<String>();

        public MyAdapter(Context context, List<Item> list) {
            super(context, resId, list);
            this.context = context;
            this.list = list;
        }
        public ArrayList<String> getEtValue(){
            return etValue;
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = convertView;

            Item item = getItem(position);

            if (v == null) {

                v = getLayoutInflater().inflate(resId, null);
                EditText et = (EditText)v.findViewById(R.id.edit);
                et.addTextChangedListener(new MyWatcher(et));
            }

            TextView tv = (TextView)v.findViewById(R.id.text);
            EditText et = (EditText)v.findViewById(R.id.edit);
            et.setTag(item);

            tv.setText(item.text);
            et.setText(item.edit);
            etValue.add(item.edit);
            return v;
        }
    }

위의 소스에서요 버튼 하나 만들고 현재 EditText에 입력된 값을 전부 로그로 찍어보려고
했는데요.. EditText에 키보드로 임의의 값을 입력하더라도 초기값이 들어갔던 0부터 13까지 출력이됩니다..
interface를 하나 만들어서 콜백하라고 하신 말씀이 정확히 어떤 작업인지 알 수 있을까요?

그리고 et에 setText할 때마다 ArrayList<String>에다가 추가해줬는데 size를 13까지 체크밖에 못하네요..
어느 부분에서 잘못 됐을까요?ㅠㅠ
ArrayList<String> etValue=new ArrayList<String>();
이건 지우세요.
메인 엑티비티에서 adapter 생성할때 넘긴 List<item> 확인해 보시면 값이 변경된걸 확인 하실 수 있을거에요.

public void getEditTextValue(View view) {        
        for(int i=0;i<list.size();i++){
            Log.d("zz",list.get(i).edit);
        }
}

interface를 사용하면 버튼이 눌러지는 시점에 activity에서 원하는 값을 받아서 처리 할수 있다는 이야기 입니다.
interface 예제는
http://rockdrumy.tistory.com/1058

요링크 참고하세요.
정말 감사합니다!!!!!!!!! 이 문제 때문에 거의 일주일을 씨름하고있었는데..
너무 허탈하고 간단하게 되서 좋으면서도 민망하네요 ㅠㅠㅠㅠㅠㅠ
정말 감사드립니다!!
...