2017-05-16 1 views
0

안녕하세요, 탐색 용 서랍 활동이 있습니다. 그 안에는 파편들이 있습니다. 나는 방향을 변경하여 onSavedInstanceState를 사용하여 시도했다. 그리고 네, 효과가 있습니다. 하지만 한 조각에서 다른 조각으로 갈 때. 그것은 호출되지 않습니다. 도와주세요. 내가해야 할 특정 일은이 조각으로 돌아갈 때 수신자 목록을 저장하는 것입니다. 미리 감사드립니다. 여기 내 코드는 : 당신의 조각 라이프 사이클이 중단 될 때하나의 프래그먼트에서 다른 프래그먼트로 이동 됨 savedInstanceState가 작동하지 않습니다.

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

@Override 
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, 
         @Nullable Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_recipients,container,false); 
    if(savedInstanceState!=null){ 
     System.out.println("savedInstanceState Called!"); 
     saved_recipients = savedInstanceState.getStringArrayList("recipients"); 
     System.out.println(saved_recipients); 
    } 
    else{ 
     System.out.println("savedInstanceState not called!"); 
     button = (Button) view.findViewById(R.id.button); 
     recipients = new ArrayList<String>(); 
     recipients_backend = new ArrayList<String>(); 
     container_recipients = (ListView) view.findViewById(R.id.listView); 
     arrayAdpt= new ArrayAdapter<String>(getActivity(), 
       android.R.layout.simple_list_item_1, recipients); 
     container_recipients.setAdapter(arrayAdpt); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
       startActivityForResult(intent, PICK_CONTACT); 
      } 
     }); 
    } 
    return view; 
} 


@Override 
public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
} 

@Override 
public void onActivityResult(int reqCode, int resultCode, Intent data) { 
    super.onActivityResult(reqCode, resultCode, data); 

    switch (reqCode) { 
     case (PICK_CONTACT) : 
      if (resultCode == Activity.RESULT_OK) { 
       String cNumber = null; 
       Uri contactData = data.getData(); 
       Cursor c = getActivity().managedQuery(contactData, null, null, null, null); 
       if (c.moveToFirst()) { 


        String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 


        String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

        if (hasPhone.equalsIgnoreCase("1")) { 
         Cursor phones = getActivity().getContentResolver().query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, 
           null, null); 
         phones.moveToFirst(); 
         cNumber = phones.getString(phones.getColumnIndex("data1")); 

        } 
        String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        recipients.add(name + " " + cNumber); 
        System.out.println("New recipient added! Current list of recipients: " + recipients); 
        if (!(recipients.isEmpty())){ 
         //button.setVisibility(View.INVISIBLE); 


        } 
        else 
         // button.setVisibility(View.VISIBLE); 
         recipients_backend.add(cNumber); 
        arrayAdpt.notifyDataSetChanged(); 
        System.out.println(recipients_backend); 

       } 
      } 
      break; 
    } 
} 
@Override 
public void onSaveInstanceState(Bundle outState){ 
    super.onSaveInstanceState(outState); 
    outState.putStringArrayList("recipients",recipients); 


} 

답변

0

onSavedInstanceState가 호출 될 때, 정상적으로 완료하지 않을 경우.

대신 , onStop 또는 onDetach 중 하나를 사용해야합니다.


시스템에서 조각의 새 인스턴스를 인스턴스화 할 계획이 없으므로 다른 곳에 저장해야합니다. 예 : 된 SharedPreferences에서 :

가져 오기 :

saved_recipients = new ArrayList(sharedPreferences.getStringSet("recipients")); 

설정 :

@Override 
public void onPause(){ 
    sharedPreferences.edit().putStringSet("recipients",new HashSet(recipients)).apply(); 
} 

영구적으로 데이터를 저장하려면,하지만 한 활동이 살고, 그것은을 저장하지 않은 경우 활동 그 자체. Fragment-Activity-communication에 대해서는 Communicating between a fragment and an activity - best practices.

+0

안녕하십니까, @ F43nd1r을 참조하십시오. 무엇보다도 먼저 내 게시물에 응답 해 주셔서 감사드립니다. 내가 어떻게 할 수 있는지에 대한 샘플 코드를 제공해 주시겠습니까? 정말 고맙습니다! – NewbieProgrammer

+0

추가 정보로 편집 됨 – F43nd1r

+0

안녕하세요, F43nd1r. 죄송합니다. 게시물에 답장하는 데 시간이 오래 걸리면 죄송합니다. 내가 이것을 시도하자. 또한 saved_recipients = new ArrayList는 어디에 두어야합니까? – NewbieProgrammer

관련 문제