Помогите найти решение.
Есть основное Activity c ActionBar и есть ListFragment в котором отображается список.
Задача такая, при нажатии на элемент ActionBar из основного Activity обновить список в ListFragment (т.е сделать lm.getLoader(0).forceLoad()). Я не понимаю как этого сделать так как инициализация лоадера выполняется во фрагменте.
Основное Activity:
//Нажатие на элемент меню ActionBar
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
//Здесь нужно выполнить запрос на обновление списка
return super.onOptionsItemSelected(item);
}
//Создаем ListFragment
FragmentOrdersNew fragment =new FragmentOrdersNew();
Bundle bundle = new Bundle();
bundle.putString("orderStatus", "0");
bundle.putString("tehGuid", tehGuid);
bundle.putString("tehToken", tehToken);
fragment.setArguments(bundle);
fragmentManager.beginTransaction()
.replace(R.id.container,fragment)
.commit();
А вот ListFragment:
public class FragmentOrdersNew extends ListFragment implements LoaderManager.LoaderCallbacks<Cursor>{
final static String LOG_TAG = "myLog";
private DB db;
private CustomAdapterOrders adapter;
private static Cursor c;
private LoaderManager lm;
private View rootView;
private static String orderStatus;
private String tehGuid;
private String tehToken;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_orders, container, false);
Bundle bundle = this.getArguments();
orderStatus = bundle.getString("orderStatus");
tehGuid = bundle.getString("tehGuid");
tehToken = bundle.getString("tehToken");
getData();
return rootView;
}
private void getData(){
db=new DB(getActivity());
db.open();
c = db.getData(orderStatus);
if(c!=null && c.getCount()>0){
lm = getLoaderManager();
lm.initLoader(0, null, this);
String[] from = new String[] {DB.COLUMN_EXT_ID};
int[] to = new int[] {R.id.tvExId};
adapter = new CustomAdapterOrders(getActivity(), R.layout.orders_list, null, from, to,lm,db,orderStatus,tehGuid,tehToken);
setListAdapter(adapter);
}else{
TextView tvEmpty=(TextView)rootView.findViewById(android.R.id.empty);
tvEmpty.setText(R.string.list_empty);
tvEmpty.setVisibility(View.VISIBLE);
}
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// TODO Auto-generated method stub
return new MyCursorLoader(getActivity(), db);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
// TODO Auto-generated method stub
adapter.swapCursor(c);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
// TODO Auto-generated method stub
adapter.swapCursor(null);
}
static class MyCursorLoader extends CursorLoader {
DB db;
public MyCursorLoader(Context context, DB db) {
super(context);
this.db = db;
}
@Override
public Cursor loadInBackground() {
c = db.getData(orderStatus);
return c;
}
}
public void onDestroy() {
super.onDestroy();
db.close();
}
}