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

커스텀 리스트뷰 라디오버튼선택하기..

0 추천

 

안녕하세요.

위의 그림대로 리스트뷰에 총 10개의[고정적] 라디오버튼/에디트텍스트를 만들었습니다.

public class menuMsg extends Fragment implements OnClickListener
{
	public ArrayList<ListItem> myItems = new ArrayList();
	private ListView msglist;//리스트뷰
	private MyAdapter myAdapter; //어댑터
	RadioButton msg_radio;
	EditText msg_edit;
	InputMethodManager imm;
	
	
	@Override
	public View onCreateView(LayoutInflater inflater,
			@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) 
	{
		View view = inflater.inflate(R.layout.menu_msg, container, false);
		msglist = (ListView)view.findViewById(R.id.msg_listView); //리스트뷰
		myAdapter = new MyAdapter();
		msglist.setAdapter(myAdapter);
		msglist.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
		
		
		msglist.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				String pos = Integer.toString(position);
				Toast.makeText(getActivity(), pos, 1000).show();
				
				
			}
		});
	
		
		return view;
	}
	
	public class MyAdapter extends BaseAdapter
	{
		private LayoutInflater lif;
   
        
        public MyAdapter() 
        {
        	lif = (LayoutInflater)getActivity().getSystemService
        			(Context.LAYOUT_INFLATER_SERVICE);
            for (int i = 0; i < 10; i++) 
            {
                ListItem listItem = new ListItem();
              //  listItem.caption = "Caption" + i;
                myItems.add(listItem);
            }
        }

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return myItems.size();
		}

		@Override
		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return myItems.get(position);
		}

		@Override
		public long getItemId(int position) 
		{
			// TODO Auto-generated method stub
			return position;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup parent) 
		{
			Log.d("..........getview","getview");
			View v = convertView;
			v=getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
			
			
			if(v ==null)
			{
				v=getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
				
			}
			else
			{
				
			}
			msg_edit = (EditText)v.findViewById(R.id.msg_edit);
			msg_radio = (RadioButton)v.findViewById(R.id.msg_radio);
			
			msg_edit.setTag(position);
			msg_edit.setOnClickListener(new View.OnClickListener() 
			{
				
				@Override
				public void onClick(View v) {
					// TODO Auto-generated method stub
					int position = (Integer)v.getTag();
					
					Log.d("ppppppppppppp",Integer.toString(position));
					
					//Toast.makeText(getActivity(),Integer.toString(position), 1000).show();
				}
			});
		
		}
		
	}
}

 위의 코드대로 작성을 했는데요,

스크롤을 올리고 내리면서 기존의 라디오버튼이 풀리거나, 에디트텍스트에 써놓은 글자도 사라집니다.

리스트뷰 스크롤을 내리고 올리면서 화면전환하는게 getview에서 이루어진다는데,

기존에 제가 선택한 라디오버튼이나 에디트텍스트의 수정된 글자를 유지시키려면 getview내에서 어떠한 작업을 해야한다는 것인지요?.

또한 해당 리스트뷰를 싱글초이스 모드로 지정해도 라디오버튼이 여러개가 선택됩니다...

싱글초이스로 모드를 지정하면 하나만 선택되는게 아닌가요..?

 

anci (19,950 포인트) 님이 2014년 12월 23일 질문

1개의 답변

+1 추천
 
채택된 답변
각각의 라디오버튼의 상태와 에디트텍스트의 텍스트를 저장해서

position마다 getView()에서 다시 설정해주는 코드가 추가되어야합니다.
nicehee (73,100 포인트) 님이 2014년 12월 23일 답변
anci님이 2014년 12월 23일 채택됨
감사합니다. 일단 라디오버튼은 성공했습니다.
남은건 에디트텍스트 요놈이네요 ㅎㅎ;
...