Я работаю над фрагментом, когда я нажимаю кнопку, он переключится на другое действие после того, как операция сохранит данные в базе данных, она вернется обратно к фрагмент, однако фрагмент не может отображать новейшие данные, мне нужно перейти к активности фрагмента, а затем снова вернуться к фрагменту, он покажет новейшие данные.Невозможно обновить фрагмент после расчесывания назад из другой активности
Вот мой код фрагмента. Я думал, что, поскольку я поместил setAdapter в метод onActivityCreated(), я попытался поместить его в onCreate() и onCreateView(), оба возвращают ошибку nullpointer.
public class TodoFragment extends ListFragment {
private TodoDataSource datasource;
private Todo item;
List<Todo> todoList;
MyCustomAdapter adapt;
ListView listTask;
EditText t;
public TodoFragment(){
}
/*@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//setHasOptionsMenu(true);
datasource = new TodoDataSource(getActivity());
datasource.open();
todoList = datasource.getAllTodos();
adapt= new MyCustomAdapter(getActivity(), R.layout.todo_list, todoList);
//ListView listTask =(ListView) rootView.findViewById(android.R.id.list);
listTask.setAdapter(adapt);
}*/
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
// if (activity != null) {
// Create an instance of the custom adapter for the GridView. A static array of location data
// is stored in the Application sub-class for this app. This data would normally come
// from a database or a web service.
datasource = new TodoDataSource(getActivity());
datasource.open();
todoList = datasource.getAllTodos();
adapt= new MyCustomAdapter(getActivity(), R.layout.todo_list, todoList);
//ListView listTask =(ListView) rootView.findViewById(android.R.id.list);
listTask.setAdapter(adapt);
Button button = (Button) getActivity().findViewById(R.id.simpleadd);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//String summary = t.getText().toString();
Intent i = new Intent(getActivity(), TodoDetailActivity.class);
//Bundle bundle = new Bundle();
// bundle.putString("Summary", summary);
//i.putExtras(bundle);
startActivity(i);
}
});
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.main, menu);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_todo, container, false);
t = (EditText) rootView.findViewById(R.id.simple);
listTask = (ListView) rootView.findViewById(android.R.id.list);
return rootView;
}
@Override
public void onResume() {
datasource.open();
super.onResume();
adapt.notifyDataSetChanged();
}
@Override
public void onPause() {
datasource.close();
super.onPause();
}
}
Вот часть моего другого кода вида деятельности. он обновит базу данных и вернется к фрагменту.
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
if (TextUtils.isEmpty(mTitleText.getText().toString())) {
makeToast();
} else {
final String category = mCategory.getSelectedItem().toString();
final String summary = mTitleText.getText().toString();
final String description = mBodyText.getText().toString();
datasource.createTodo(category, summary, description);
setResult(RESULT_OK);
finish();
}
}
});
Я пробовал, но ничего не изменилось ... может быть, мне нужно переместить что-то из onActivityCreated() в onCreate()? – Aprilyn
Нет, не изменяйте это, если представление создается при первом отображении. Я думаю, что необходимо провести дополнительное расследование, попробуйте выяснить, вызван ли вызов onResume(), я обновлю свой ответ, чтобы попытаться помочь вам. Также взгляните на это сообщение: http://stackoverflow.com/questions/16219732/refreshing-arrayadapter-onresume-notifydatasetchanged-not-working/16219931#16219931 –
Я попробую и найду больше ссылок, спасибо человеку! – Aprilyn