sharedpreference를 이용해서 리스트뷰에 있는 에디트텍스트의 내용을 저장하려고 합니다.
리스트는 총 10줄이며, 에디트텍스트도 한 줄에 하나씩 배치되어있어 총 10개 입니다.
Fragment를 상속받은 액티비티에서 작업합니다.
전역변수로 SharedPreferences pref = null; / EditText msg_edit; 이렇게 추가해 주었습니다.
public class menuMsg extends Fragment implements OnClickListener
{
public ArrayList<ListItem> myItems = new ArrayList();
Button btn_send;//보내기버튼!
private ListView msglist;//리스트뷰
private MyAdapter myAdapter; //어댑터
RadioButton msg_radio;
EditText msg_edit;
InputMethodManager imm;
SharedPreferences pref = null;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
{
View view = inflater.inflate(R.layout.menu_msg, container, false);
//전송버튼
btn_send = (Button)view.findViewById(R.id.btn_send);
btn_send.setOnClickListener(this);
msglist = (ListView)view.findViewById(R.id.msg_listView); //리스트뷰
myAdapter = new MyAdapter();
msglist.setAdapter(myAdapter); //setadapter
pref = getActivity().getSharedPreferences("pref", Activity.MODE_PRIVATE);
return view;
}
@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
SharedPreferences.Editor editor = pref.edit();
editor.putString("msg", msg_edit.getText().toString());
editor.commit(); //변경된 텍스트내용 저장.
Log.d("onStop...","온스탑");
}
public class MyAdapter extends BaseAdapter
{
private LayoutInflater lif;
int selectedPosition = 0;
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_edit.setText("ggggggggggggggg");
for(int i=0; i<50; i++)
{
if(position == i)
{
msg_edit.setText(pref.getString("msg", ""));
}
}
msg_edit.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
msg_edit.requestFocus();
// EditText msg_edit = (EditText)v.getTag();
if(msg_edit!=null)
{
Log.d("에디트텍스트 널값X","..");
String text = msg_edit.getText().toString();
msg_edit.setText(text);
notifyDataSetInvalidated();
}
}
});
msg_radio = (RadioButton)v.findViewById(R.id.msg_radio);
msg_radio.setChecked(position==selectedPosition);
msg_radio.setTag(position);
msg_radio.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
selectedPosition = (Integer)v.getTag();
notifyDataSetChanged();
Log.d("현재 선택 된 라디오버튼 값은?",Integer.toString(selectedPosition));
}
});
return v;
}
}
}
10개의 에디트텍스트의 포지션 값을 인식하지 못한걸까요?
텍스트를 아무거나 입력하고 다른 페이지로 갔다가 다시 해당페이지로 가도 저장->setText로 출력되어야 하는데,
초기상태입니다.. 어떻게 저장해야 할지 모르겠습니다. 조언 좀 해주시면 감사하겠습니다 ㅠ