Fragment内のListViewの中身を更新できるようにしたいのですが、方法がわからず投稿します。
更新のタイミングは
・numberPickerDialog()を呼び出し、ダイアログ内で時間を設定して「OK」を押す
・横にスライドしてFragmentが完全に切り替わったとき
この2つですが、呼び出し方がわからず詰まっています。現在の画面構成がこのような形です
現在のコードがこちらになります。
ConfigFragment.java
public class ConfigFragment extends Fragment { ListView mListView; View view; int mSecond; int mMinute; SharedPreferences preferences; SharedPreferences.Editor mEditor; View timerLayout; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_config, container, false); preferences = this.getActivity().getSharedPreferences("pref", 0); mEditor = preferences.edit(); mMinute = preferences.getInt("min",00); mSecond = preferences.getInt("sec",3); ArrayList<Map<String, String>> list = new ArrayList<Map<String, String>>(); Map<String, String> time= new HashMap<String, String>(); time.put("main", "時間"); time.put("sub",mMinute+":"+mSecond); list.add(time); SimpleAdapter adapter = new SimpleAdapter( getActivity(), list, android.R.layout.simple_list_item_2, new String[]{"main", "sub"}, new int[]{android.R.id.text1, android.R.id.text2} ); mListView = (ListView) view.findViewById(R.id.listView); mListView.setAdapter(adapter); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (position == 0) { numberPickerDialog(); } } }); return view; } private void numberPickerDialog(){ timerLayout = getLayoutInflater().inflate(R.layout.timer_layout,null); final NumberPicker min = (NumberPicker) timerLayout.findViewById(R.id.numberPickerMin); min.setMaxValue(99); min.setMinValue(0); final NumberPicker sec = (NumberPicker) timerLayout.findViewById(R.id.numberPickerSec); sec.setMaxValue(59); sec.setMinValue(0); final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setView(timerLayout) .setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { mMinute = min.getValue(); mSecond = sec.getValue(); mEditor.putInt("min",min.getValue()); mEditor.putInt("sec",sec.getValue()); mEditor.apply(); mListView.invalidateViews(); ViewGroup viewGroup =(ViewGroup) timerLayout.getParent(); viewGroup.removeView(timerLayout); } }) .show(); } }
OKボタンを押した時の処理に
「mListView.invalidateViews();」
を追記してもListViewを更新して数値も更新しようとしているのですが、全く反映されず、Fragmentの切り替えも
@Override public void onResume(){ super.onResume(); Log.d("root","rootResume!"); } @Override public void onStart() { super.onStart(); Log.d("root", "rootStart!"); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("root", "rootCreate!"); } }
このように記載しても起動時に同時に3つの処理が走り、スライドしてFragmentを切り替えてもどれもログが出力されませんでした。起動時のしょりというと、この3つしか思い当たらないのですが、Fragment切り替え時にどれをつかえばよいのでしょうか?
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。