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

리스트뷰의 에디트텍스트 내용 저장/출력하기

0 추천

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로 출력되어야 하는데,

초기상태입니다.. 어떻게 저장해야 할지 모르겠습니다. 조언 좀 해주시면 감사하겠습니다 ㅠ

anci (19,950 포인트) 님이 2015년 1월 2일 질문

1개의 답변

0 추천

Log.d("..........getview","getview");

View v = convertView;

//v=getActivity().getLayoutInflater().inflate(R.layout.msg_listview, null);
 
먼저 위 마지막 라인에 // 처리하고 다시 해보셔요
           
nicehee (73,100 포인트) 님이 2015년 1월 2일 답변
답변감사합니다. 겟뷰내의 저 코드를 주석처리 했는데도 그대로네요 ㅎ;;
...