【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> { ・・・ } }
以上です