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

sharedPreference 질문!

0 추천
public class Chat_List_Tab extends Fragment{

 

    public List<Chat_list> list;
    private ArrayList<String> arrayList;

    private BaseAdapterActivity adt;
    private RecyclerView recyclerView;
    private LinearLayoutManager layoutManager;
    public Chat_list chat_list;

    private String room_name;

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.tab_list, container, false);

        //ViewPager pager = (ViewPager)getActivity().findViewById(R.id.viewPager);

        list = new ArrayList<>();
        arrayList = new ArrayList<>();

        adt = new BaseAdapterActivity(getActivity(), list, R.layout.tab_list);

        recyclerView = (RecyclerView) view.findViewById(R.id.tab_recyclerview);
        layoutManager = new LinearLayoutManager(getActivity());
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adt);

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());

        int num = sharedPreferences.getInt("list_size", 0);

        Log.i("list-2", String.valueOf(list.size()));
        Log.i("arrayList-2", String.valueOf(arrayList.size()));

        for(int i = 0; i<num; i++)
        {
            chat_list = new Chat_list(sharedPreferences.getString("room_name"+i, null));

            list.add(chat_list);

            adt.notifyDataSetChanged();
        }

        return view;
    }

    @Override
    public void onResume()
    {
        super.onResume();

        if(add)
        {
            add_Room();

            add = false;
        }
    }

    public void add_Room()
    {
        try
        {
            if (name!= null && name != "")
            {
                room_name = name;

                if(!list.contains(room_name))
                {
                    try
                    {
                        chat_list = new Chat_list(room_name);

                        list.add(chat_list);
                        arrayList.add(room_name);

 

                        Log.i("list", String.valueOf(list.size()));
                        Log.i("arrayList", String.valueOf(arrayList.size()));

 

                        adt.notifyDataSetChanged();
              }

                    catch (Exception e)
                    {
                        Log.i("Exception", e.toString());
                        e.printStackTrace();
                    }
                }
            }
            else
            {
                Log.i("room_name", "NULL");

                Toast.makeText(getActivity(), "NULL", Toast.LENGTH_SHORT).show();
            }
        }
        catch (Exception e)
        {
            Log.i("add_Room", String.valueOf(name));
            Log.i("add_Room ERROR", e.toString());
        }
    }

    @Override
    public void onPause()   < -- 여기서 저장할 때 , list로 하는 것과 arrayList로 하는 것이 다른 결과를 만들어냅니다
    {
        super.onPause();

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
        SharedPreferences.Editor edit = sharedPreferences.edit();

        edit.putInt("list_size", list.size());

        for (int i = 0; i < list.size(); i++)
        {
            edit.putString("room_name"+i, list.get(i).toString());
        }

        edit.commit();

 

이런식으로 list 를 이용하여 앱을 실행시켰을때는, 값이 recyclerView에 추가가되거든요, 앱을 종료했다가 재 실행했을 경우에 말이에요,

 

그런데 이 부분을 arrayList로 바꿔서 만들면, 값이 추가가 되다가 앱을 재실행시키면 마지막에 추가한 값만 recyclerView에 추가가 되어있습니다;

 

왜 그런건지 모르겠습니다; 답변 부탁드립니다.
    }

    @Override
    public void onDestroy()
    {
        super.onDestroy();

        //chat_list_room = false;
    }
}
알파고 (4,320 포인트) 님이 2017년 11월 8일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...