2017-05-16 5 views
0

こんにちは、私はナビゲーション・ドロワー・アクティビティを持っています。それらの中には断片があります。私は、方向を変更してonSavedInstanceStateを使ってみました。そして、はい、それは働いています。しかし、私は片方の断片から別の断片に行きます。それは呼び出されていません。助けてください。私がする必要がある具体的なことは、このフラグメントに戻るときに受信者リストを保存することです。事前にありがとうございます。ここに私のコードは次のとおりです。あなたの断片のライフサイクルが中断されたときに1つのフラグメントから別のフラグメントに移動しました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

関連する問題