public class MyAdapter extends BaseAdapter {
private LayoutInflater lif;
int selectedPosition = 0;
int editsPosition = 0;
public MyAdapter() {
lif = (LayoutInflater) getActivity().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < 50; i++)
{
ListItem listItem = new ListItem();
listItem.caption = "Caption" + i;
myItems.add(listItem);
}
notifyDataSetChanged();
}
@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(final int position, View convertView,ViewGroup parent)
{
View v = convertView;
final ViewHolder holder;
if (v == null) //레이아웃 초기화 자업
{
v = getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
Log.d("","v==null");
holder = new ViewHolder();
holder.msg_edit = (EditText) v.findViewById(R.id.msg_edit);
holder.msg_radio = (RadioButton) v.findViewById(R.id.msg_radio);
holder.msg_savebtn = (Button) v.findViewById(R.id.msg_savebtn);//edit저장버튼
v.setTag(holder);
}
else // null이 아닐 때 저장된 뷰 홀더를 재사용.
{
Log.d("","v!=null");
holder = (ViewHolder)v.getTag(); //v.setTag(holder)재사용
}
holder.msg_radio.setChecked(position == selectedPosition);
holder.msg_radio.setTag(position);
holder.msg_radio.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
selectedPosition = (Integer) v.getTag();
Log.d("현재 선택 된 라디오버튼 값은?",
Integer.toString(selectedPosition));
String whatisedit1 = holder.msg_edit.getText().toString();
Toast.makeText(
getActivity(),
"라디오버튼 :" + Integer.toString(selectedPosition)+ "/" + whatisedit, Toast.LENGTH_LONG).show();
String text = pref.getString("Editmsg", "");
holder.msg_edit.setText(text);
//전체setText
notifyDataSetChanged();
}
});
holder.msg_savebtn.setTag(position);
holder.msg_savebtn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
int savebtnpos = (Integer) v.getTag();
Log.d("savebtn position",Integer.toString(savebtnpos));
whatisedit = holder.msg_edit.getText().toString();
// holder.msg_edit.setText(whatisedit);
Toast.makeText(getActivity(), "[저장]"+Integer.toString(savebtnpos)+"번 버튼 : "
+whatisedit, 1000).show();
//whatisedit=>해당 포지션에 입력된 string값
//입력한 텍스트 저장하기.
SharedPreferences.Editor ed = pref.edit();
ed.putString("Editmsg", whatisedit);
ed.commit();
// String text = pref.getString("Editmsg", "");
// holder.msg_edit.setText(text);
}
});
btn_send.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.d("[전송]선택 된 라디오버튼 값은?",Integer.toString(selectedPosition));
String whatisedit = holder.msg_edit.getText().toString();
Log.d("[전송]선택 된 텍스트 값은?",whatisedit);
showDialog(whatisedit);
}
});
return v;
} // getview
}//Databaseadapter
public class ViewHolder
{
public EditText msg_edit;
public RadioButton msg_radio;
public Button msg_savebtn;
}
커스텀 리스트뷰를 통해 50개의 리스트를 만들었습니다.
한 줄마다 [라디오버튼] [에디트텍스트] [저장버튼] 이렇게 구성되어있습니다.
지금 몇 일째...이 getview에 의한 재사용문제로 고민 중입니다.
포지션값이 뒤죽박죽으로 바뀌는 바람에 editText에 써놓은 문자를 저장하지도 못하네요..
대략 한 화면에 5개의 줄이 보이는데, 재사용문제..아시다시피 스크롤을 하면 0번째에 써놓은 값이
밑에 있는 editText들에도 보입니다. 전혀 건드리지도 않았는데 말이죠....
convertview가 null이 아닐 때, 어떠한 조건문 처리를 해서 값이 중복되지 않게 , 포지션값이 제대로 나오게 해야하는지
모르겠습니다...