読者です 読者をやめる 読者になる 読者になる

【android】Fragment + ListViewでのAPIへのリクエストのタイミングについて

はじめに

今回やりたかったことは以下
APIから取得したデータをFragment上のListViewへセット
・ListViewのセルをタップしたら詳細画面へ遷移
・詳細画面で戻るボタンでListViewへ戻る

これだけと思ってたら1日はまってしまった。
何にはまったかというと詳細画面から戻った時にAPIへ再度リクエストしていた。

これの解決策がなかなか出てこなかった。。。
そもそもFragmentのライフサイクルとか全然頭になかったところからスタートだったので色々と知識不足

解決策

http://qiita.com/ymd_aaa/items/d04d174fef98c93ef593
中々みつからなかったがまさにここに求めていた答えがありました。

APIリクエストしてデータの取得してアダプタへのセットをonCreateViewメソッドで行なっていたのですが。
これをonCreateメソッドで行うようにすれば戻ってきた時にデータの再取得は行わずやりたいことができました。

処理イメージ

public class MyFragment extends Fragment {

    private ArrayList<UserData> userDataList;
    private UserDataAdapter adapter;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // データの初期化                                                                                                                                                                                  
        userDataList = new ArrayList<>();
        adapter = new MuserDataAdapter(getContext(), 0, userDataList);

        // ★ここでAPIコールしてレスポンスをアダプタにデータをセット                                                                                                                                    
        // adapter.notifyDataSetChanged();とか                                                                                                                                                                 
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // ListViewセット                                                                                                                                                                                          
        ListView listView = (ListView)view.findViewById(R.id.list_view);
        listView.setAdapter(adapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                ・・・
            });

        return view;
    }

    public class UserData {
        ・・・
    }

    public class UserDataAdapter extends ArrayAdapter<UserData> {
        ・・・
    }
}

以上です